现在,Interface Builder允许用户动态更改情节提要中每个视图控制器的大小,以模拟特定设备的大小.
在此功能之前,用户应手动设置每个视图控制器的大小.因此,视图控制器以一定的大小保存,并在initWithCoder
中用于设置初始帧.
现在,initWithCoder
似乎没有使用情节提要中定义的大小,而是为视图控制器视图和它的所有子视图定义了initWithCoder
0xinitWithCoder
0px的大小.
这不是问题,因为视图应始终使用以下两种布局解决方案之一:
但是这is对于所有与视图层相关的布局material 来说都是一个问题,比如cornerRadius
,因为autolayout和autoresizing mask都不适用于图层属性.
要回答此问题,如果您在控制器中,则通常使用viewDidLayoutSubviews
;如果您在视图中,则使用layoutSubview
.至此(不要忘记调用它们的super
个Relative方法),您非常确定所有布局工作都已完成!
百分之百确定?哼...不完全是,我已经说过了,这就是我问这个问题的原因,在某些情况下,视图在这种方法上仍然有Pretty0xPretty0的大小.我想我自己的问题没有答案.要提供有关它的最多信息,请执行以下操作:
1-只有在布置单元时才会发生!在UITableViewCell
&;UICollectionViewCell
个子类,layoutSubview
子类不会被称为after子视图将被正确布局.
2-正如@EugenDimboiu comments 的那样(如果对你有用,请向上投票他的答案),在未布局的子视图上呼叫[myView layoutIfNeeded]
将及时正确地布局.
- (void)layoutSubviews {
[super layoutSubviews];
NSLog (self.myLabel); // 1000x1000 size
[self.myLabel layoutIfNeeded];
NSLog (self.myLabel); // normal size
}
3-依我之见,这绝对是个漏洞.我已经把它提交给雷达了(Id 28562874).
注:我不是英语母语,所以如果我的语法需要更正,请随意编辑我的帖子;)
PS2:如果你有更好的解决方案,请不要再写其他答案.我将提出被接受的答案.