4

如何修复屏幕上的子视图位置(尤其是在 UIScrollView 和 UITableView 中)?我认为在故事板中

[self.view addSubview:aSubView];

不再工作了。

有任何想法吗?

编辑#1:我使用的是 UITableViewController,而不是简单的 UITableView。

编辑#2

CGRect fixedFrame = self.menuViewRelative.frame;
fixedFrame.origin.y = 0 + scrollView.contentOffset.y;
self.menuViewRelative.frame = fixedFrame;

menuViewRelative = [[UIView alloc] init];
menuViewRelative.backgroundColor = [UIColor grayColor];
menuViewRelative.frame = CGRectMake(0.0, 0.0, 320.0, 50.0);

[self.view addSubview:self.menuViewRelative];
4

4 回答 4

17

正如其他人所指出的,如果您不使用 a ,这会更容易一些UITableViewController,但无论如何也没那么难。

UITableView是 的子类UIScrollView,因此表视图的委托(UITableViewController在本例中为您的实例)也将接收UIScrollViewDelegate方法调用。您所要做的就是实现每次滚动偏移更改时调用的方法并调整“固定”视图的框架。

像这样的东西:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGRect fixedFrame = self.fixedView.frame;
    fixedFrame.origin.y = 20 + scrollView.contentOffset.y;
    self.fixedView.frame = fixedFrame;
}

将 20 替换为您希望它距表格视图顶部的点数。您仍然添加self.fixedView为 的子视图self.view,这将确保它看起来像在表格视图上方的固定位置。


编辑:使用您发布的代码,我猜您的版本应该如下所示:

- (void)viewDidLoad {
    menuViewRelative = [[UIView alloc] init];
    menuViewRelative.backgroundColor = [UIColor grayColor];
    menuViewRelative.frame = CGRectMake(0.0, 0.0, 320.0, 50.0);

    [self.view addSubview:self.menuViewRelative];
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
    CGRect fixedFrame = self.menuViewRelative.frame;
    fixedFrame.origin.y = 0 + scrollView.contentOffset.y;
    self.menuViewRelative.frame = fixedFrame;
}
于 2012-12-02T18:14:10.833 回答
3

您可以将您的子视图添加到窗口中,例如:

[self.view.window addSubview:mySubView];

这个对我有用。我在动态表格视图中添加了一个像素位置信息视图。

于 2013-03-06T16:03:03.063 回答
0

如果它是一个包含表格视图的简单视图控制器,则 [self.view addSubview:aSubView] 应该可以工作。但如果它是一个表格视图控制器,它就不会工作。

于 2012-12-02T10:40:54.170 回答
0

可以通过将子(您的)视图从 UIScrollView 移动到滚动视图的超级视图来完成。

这是一个简单的示例:
将按钮放置/设置在滚动视图上(不在滚动视图内),如此处所示。并且还针对滚动视图的超级视图设置按钮约束(位置)。

在此处输入图像描述

这是参考。每个视图的位置层次结构的快照。

在此处输入图像描述

于 2017-08-25T17:10:37.330 回答