iOS:在屏幕上添加具有修复位置的子视图

时间:2012-12-01 20:05:20

标签: ios xcode uiview position

如何修复屏幕上的子视图位置(尤其是在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 个答案:

答案 0 :(得分:17)

正如其他人所说,如果你不使用UITableViewController,这会更容易一些,但不管怎么说都不是那么难。

UITableViewUIScrollView的子类,因此表视图的委托(在这种情况下为您的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)

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

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

enter image description here

这是参考。每个视图相对于彼此的位置层次结构的快照。

enter image description here