【问题标题】:UIScrollView Setting contentoffset in viewwillappear not workingUIScrollView 在视图中设置 contentoffset 将无法正常工作
【发布时间】: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 方法中,但行为没有改变

标签: ios objective-c uiscrollview


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-18
      • 2014-04-21
      • 1970-01-01
      • 2017-04-24
      • 2023-03-24
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多