UIScrollView 在视图中设置 contentoffset 将无法正常工作

Posted

技术标签:

【中文标题】UIScrollView 在视图中设置 contentoffset 将无法正常工作【英文标题】:UIScrollView Setting contentoffset in viewwillappear not working 【发布时间】:2014-09-18 14:53:28 【问题描述】:

我想知道是否可以在 viewwillappear 方法中为 uiscrollview 设置 contentoffset。

-(void) viewWillAppear:(BOOL)animated

    [self.scrollView setContentOffset:CGPointMake(320, 0) animated:YES];
    NSLog(@"CALLED");    

我可以看到 viewwillappear 正在运行,但不幸的是它没有设置偏移量。

谢谢

【问题讨论】:

viewWillAppear方法中scrollView的contentSize是多少?我认为如果 contentSize.width 小于 320 那么它不会做太多。 内容大小为 self.scrollView.contentSize = CGSizeMake(1230, 450);但这是在 viewdidload 方法中设置的。我刚刚尝试将它放在 viewwillappear 方法中,但行为没有改变 【参考方案1】:

您应该在尝试设置偏移量之前调用[super viewWillAppear:animated];

但是,您可能试图在视图生命周期中过早地设置偏移量。

最好覆盖-(void)viewDidLayoutSubviews;,并在那里设置偏移量。

因为您的视图框架应该在那时都已正确设置。 (记得也打给super

【讨论】:

注意viewDidLayoutSubviews可以被多次调用,不想要的时候会触发contentOffset的设置。如果你走这条路,你需要跟踪你的视图状态。【参考方案2】:

我有一个更好的选择:

您可以手动设置布局,而不是覆盖viewDidLayoutSubviews

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    view.layoutIfNeeded()
    // Do something here

这样你就可以得到一个符合你期望的全新布局

【讨论】:

【参考方案3】:

我已经在 viewWillAppear 中测试了你的 scrollView 的 contentSize 和 contentOffset。它对我来说很好。因此,请检查您的 scrollView 对象是否正确绑定到您的 scrollView

【讨论】:

以上是关于UIScrollView 在视图中设置 contentoffset 将无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在UIScrollView的所有子视图中设置缩放效果

将 XIB 的 UIScrollView 添加到视图时设置 contentSize

为捏合手势设置 UIScrollView 的原点

无法设置 UIView 的 backgroundColor,它是 Swift 中 UIScrollView 的子视图

具有自适应布局的 UIScrollView

将动态高度设置为 UIScrollView Swift