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 将无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
将 XIB 的 UIScrollView 添加到视图时设置 contentSize