iOS: Add subview with a fix position on screen

2019-07-04 09:24发布

如何解决(尤其是在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];

Answer 1:

正如其他人指出,这将是一个更容易一点,如果你没有使用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作为的subliew 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;
}


Answer 2:

你可以添加子视图到窗口,如:

[self.view.window addSubview:mySubView];

这个对我有用。 我加入一个动态表视图中的PIX位置信息视图。



Answer 3:

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



Answer 4:

这是可以做到,通过移动的UIScrollView子(你)以滚动型超视图。

下面是简单的例子:
如下所示在此快照的地方/在滚动视图(不内滚动视图)设置你的按钮。 并设置按钮约束(位置)相对于你的滚动型超视图。

这是裁判。 的在每个-其他每个视图的位置分层结构的快照。



文章来源: iOS: Add subview with a fix position on screen