如何修复屏幕上的子视图位置(尤其是在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];
答案 0 :(得分:17)
正如其他人所说,如果你不使用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;
}
答案 1 :(得分:2)
您可以将子视图添加到窗口中,例如:
[self.view.window addSubview:mySubView];
它对我有用。我在动态表格视图中添加了一个像素位置信息视图。
答案 2 :(得分:0)
如果它是一个包含表视图的简单视图控制器,[self.view addSubview:aSubView]应该可以工作。但如果它是一个表视图控制器,它就不会工作。
答案 3 :(得分:0)