我正在使用一个键盘iOS 8,使用Autolayout将按钮放在视图上.
当我使用约束更改布局时,所有内容都在屏幕上正确显示,但是当我想知道视图的帧大小时,我没有得到正确的大小.
当我使用约束更改布局时,所有内容都在屏幕上正确显示,但是当我想知道视图的帧大小时,我没有得到正确的大小.
例如:我按一个键,键盘布局根据我的限制改变和布局一切.然后我想知道屏幕上任何按钮的大小 – 我在“viewDidLayoutSubviews”中执行此操作,并在控制台中获取该结果:
2014-10-29 12:27:09.088 Keyboard[2193:60674] view did layout subviews 2014-10-29 12:27:09.088 Keyboard[2193:60674] {{inf,inf},{0,0}}
该按钮具有正确的大小和正确的位置,但是当尝试获取其框架时,尺寸未设置.
在ViewDidLayoutSubviews中无法使用代码的时候,该怎么办?
我在stackoverflow和其他网站上发现了很多问题,但没有一个涵盖了我的问题.
解决方法
我遇到了一个非常类似的问题(upvoted的问题),并发现
beeef’s answer指向正确的方向.鉴于Apple的文档不直接调用layoutSubviews(),所以我做了如下(mySubView是self.view的直接子视图):
override func viewDidLayoutSubviews() { // self.view's direct subviews are laid out. // force my subview to layout its subviews: self.mySubView.setNeedsLayout() self.mySubView.layoutIfNeeded() // here we can get the frame of subviews of mySubView // and do useful things with that... }
只是FYI,在我的情况下mySubView是一个UIScrollView,我需要得到其一个子视图的框架,这样我可以在视图出现之前相应地设置contentOffset.我不知道viewDidLayoutSubviews()是否是最佳的做法,但它确保mySubView已被布局.