以上都不是答案的全部工作对我来说,除了viewDidLoad
但是这并没有显示的副作用我想要什么,直到观看动画后,看起来很差。
viewDidLayoutSubviews
应该是运行依赖于自动布局是完整的代码正确的地方,但正如其他人指出,这是在最近的IOS版本称为多次,你可以不知道这是最后的通话。
所以我解决了这个小黑客。在我的故事板中,mySubview
应该小于其包含self.view
。但是当第一次调用viewDidLayoutSubviews
时,mySubview
的宽度仍然为600,而self.view
似乎设置正确(这是iPhone项目)。所以我所要做的就是监控后续调用并检查相对宽度。一旦mySubview
小于self.view
我可以确定它已正确布置。
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if self.mySubview.bounds.size.width < self.view.bounds.size.width {
// mySubview's width became less than the view's width, so it is
// safe to assume it is now laid out correctly...
}
}
这具有不依赖于硬编码数字的优势,因此它可以在所有iPhone外形因素上工作,例如。当然,在所有情况下或所有设备上,它可能都不是万能的,但可能有许多巧妙的方法来做相似尺寸的类似检查。
不,我们不应该这样做,但直到苹果给我们一些更可靠的回调,我们都坚持下去。
我试图在'viewDidLoad'中记录消息。自动布局完成后调用哪个方法。我问的原因是因为我想在用户可以与textView交互之前计算宽度。所以记录对象描述可能无助于bcuz我想使用宽度进行其他计算。 – user1046037
不,'viewDidLoad'发生在自动布局之前。在视图添加到另一个视图(这是在调用viewWillAppear后不久,但在viewDidAppear之前可能不可靠)之后,自动布局会懒惰地发生。知道唯一可靠的方法是在视图控制器的视图上知道layoutSubviews何时完成。 – Jesper
你为什么试图让框架呢?如果你想根据它进行计算并做自己的布局,你最终可能会与自动布局战斗。 – Jesper