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 ,这将会容易一些,但是这并不难。

UITableViewUIScrollView的子类,所以表视图的委托(在这种情况下你的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约束(位置)相对于您的滚动视图的超级视图。

在这里输入图像说明

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

在这里输入图像说明