1
xhacker 2015-05-22 15:47:22 +08:00 via iPhone 1
就 view.frame 就行。
|
4
newtonisaac 2015-05-22 16:15:23 +08:00
代码哪里?是已经生成了view还是之前?
|
7
cheng4741 OP @newtonisaac 已经生成了,现在我要给这 view添加一个layer,需要知道它的大小
|
9
black 2015-05-22 18:04:56 +08:00 2
这是 iOS 开发的老"坑"了,原因是对 view controller 的生命周期理解不够。
我给两个方案给你: 1. 把代码放到 -(void)viewDidLayoutSubviews 里去吧,你会发现这时 view controller 的 view 大小已经调整好了,但是 [千万要注意!] 这个方法会调用多次。 2. 仍然放在 -(void)viewDidLoad,如下: - (void)viewDidLoad { ... dispatch_async(dispatch_get_main_queue(), ^{ // your code }); } |
10
dorentus 2015-05-22 18:16:47 +08:00
viewWillAppear 里面的 frame 也应该是正确的了,不过也会有被多次调用的问题
你这种情况也可以 subclass UIView,然后在 layoutSubviews 里面处理 frame 的变化吧 |
11
langhua9527 2015-05-22 18:19:18 +08:00
自动布局为什么要取frame?
|
12
yoki 2015-05-25 15:06:15 +08:00 1
你好 之前也遇到过这样的问题 来说一下我的解决办法
自动布局是会在更新视图的时候同步更新frame bounds的 然而有时候我们在代码中获取的时候却得到{(0,0),(0,0)} 或者各种奇怪的结果 这是因为在你用代码获取frame的时候系统还没有更新你的layout 楼上的朋友@dorentus 提供的解决方案应该是可行的 因为在viewWillAppear中一般的视图都更新完layout了 应该是可以获取到的 但是有时候我们想在任意函数中获取怎么办呢 解决方案是在获取之前加上一句[myDemoView layoutIfNeeded]; 如 ``` [myDemoView layoutIfNeeded]; NSLog("frame:%@",NSStringFromRect(myDemoView.frame)); ``` 这个回复是我在PC上打的 拼写也许有错误 希望能帮到你 |