如何在应用自动布局后获取UIImageView的尺寸?

8

在我的故事板里,有一个UIImageView,它是根据自动布局约束自动定位和缩放的。

当应用程序运行时,这个UIImageView会根据设备屏幕大小和自动布局约束正确地调整大小和位置。

我如何在它显示在屏幕上后获取UIImageView的框架? 常见的UIImageView.bounds和UIImageView.frame值返回的是在故事板中使用的原始值,不反映新的UIImageView尺寸。


你把获取“frame”的代码放在哪里了? - yusuke024
在主视图控制器的-(void)viewWillAppear:(BOOL)animated方法中。 - Kibernetik
很好的问题,tbaranes 的答案真的帮了我很多。您应该更新问题,将“frame”一词纳入其中,以便那些试图在约束条件应用后找到正确原点的人也能找到这个问题。 - TMin
2个回答

16
为了在调整大小后获取您的UIImageView的正确框架/边界,您需要首先要求自动布局使用[yourImageView layoutIfNeeded]更新该布局。这将解决您的约束并更新您的yourImage.bounds
[myImageView layoutIfNeeded];
NSLog(@"w: %f, h: %f", myImageView.bounds.size.width, myImageView.bounds.size.height);

非常感谢!您的评论解决了我的问题。 - Kibernetik
很遗憾,它不能适用于不同的尺寸类别。 - khunshan
1
如果我想要对布局变化进行动画处理,并且同时在动画结束后知道最终帧,该怎么办? - DanSkeel
似乎frame是正确的选择,因为bounds只返回原点的0。 - thedp

8

请查看以下方法:

- (void)viewWillAppear:(BOOL)animated {
// view is about to be added to hieararchy
}

- (void)viewDidAppear:(BOOL)animated {
// view was added
}

- (void)viewDidLayoutSubviews {
// VC just laid off its views
}

1
是的,-(void)viewDidLayoutSubviews是获取更新尺寸的正确位置,并且解决了这个问题。非常感谢! - Kibernetik
2
@Kibernetik,别忘了调用super - orkenstein
1
谢谢您的留言! - Kibernetik
这是正确的地方。请确保使用 frame 而不是 bounds - thedp
@thedp:对于高度和宽度,这并不重要。 - Preetam Jadakar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接