iOS:在屏幕上添加具有修复位置的子视图
如何修复屏幕上的子视图位置(特别是在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];
正如其他人所指出的那样,如果你不使用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; }
用表格视图顶部的多less点replace20。 您仍然添加self.fixedView
作为self.view的子视图,这将只是确保它看起来像它在表视图上方的固定位置。
编辑:你发布的代码,我猜你的verion应该是这样的:
- (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; }
你可以只添加你的子视图到窗口中,如:
[self.view.window addSubview:mySubView];
这个对我有用。 我在dynamic表格视图中添加了一个pix位置信息视图。
如果它的一个简单的视图控制器包含一个表视图,[self.view addSubview:aSubView]应该工作。 但如果它是一个表视图控制器,它不会工作。
可以通过将UIScrollView的子视图(你的)移动到滚动视图的超级视图来完成。
这是一个简单的例子:
将此button放置在滚动视图上(不在滚动视图中),如本快照中所示。 还可以设置button约束(位置)相对于您的滚动视图的超级视图。
这里是参考。 每个视图的位置层次的快照。