所以这是我的问题,我有一个scrollview包含一些子视图,其中包含一些与布局相关的动态内容。我想设置scrollview的contentsize正好是子视图大小的总和。
单词rootview-> scrollview->带动态内容的一些子视图(让我们说多用途UILabel)
所以这就是我所做的:
根据viewDidLayoutSubviews中的文档,此方法被调用并不表示已调整视图子视图的各个布局。每个子视图都负责调整自己的布局。
所以当这种方法发生时,我的UILabel没有布局。
然后在viewdidappear中我设置了contentSize,但是一个新问题是当我们切换到横向时这个问题没有激活,所以我在viewDidLayoutSubview和viewdidappear中都进行了设置。
我的问题是 1.有更好的方法吗? 2.根视图的子视图完成子视图布局的确切时刻在哪里,以及如何进入它?(子类看起来有点沉重)
我在ios7中使用了自动布局和约束,我尝试了setviewNeedLayout并在viewwilllayoutsubviews中进行了布局,但是没有用。
在viewdidlayoutsubviews中将layoutifneeded切换到方向时会崩溃
这里有一些代码:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self adjustScrollViewContentSize];
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
[self adjustScrollViewContentSize];
}
- (void)adjustScrollViewContentSize
{
UIView *bottomUIView = [self getBottomUIView];
CGRect superRect = [bottomUIView convertRect:bottomUIView.bounds toView:self.scrollView];
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, superRect.origin.y + superRect.size.height);
}
答案 0 :(得分:1)
使用AutoLayout,您应该能够添加约束,这样您就不需要手动更新contentSize - scrollView将根据其内容的大小自行调整它。
关键是确保您具有将内部子视图附加到scrollview的所有4个内部边缘的内部约束。例如,使用可视格式语言:
|[myLabel]|
V:|[myLabel]-[someOtherLabel]|
基本上,只要你有明确的约束通过你的子视图将左边缘连接到右边缘(并且从上到下相同),那么scrollview将从那些推断出它的contentSize。