【问题标题】:How to get UIImageView size after autolayout is applied?应用自动布局后如何获取 UIImageView 大小?
【发布时间】:2015-02-11 19:25:45
【问题描述】:

我的故事板有 UIImageView,它通过自动布局约束自动定位和缩放。

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

UIImageView 框架显示在屏幕上后如何获取? 常见的 UIImageView.bounds 和 UIImageView.frame 值返回在情节提要中使用的 原始 值,并且不反映新的 UIImageView 大小。

【问题讨论】:

  • 你把获得frame的代码放在哪里了?
  • In - (void)viewWillAppear:(BOOL) 主 ViewController 的动画。
  • 好问题,tbaranes 的回答真的帮了我大忙。您应该更新问题以包含“框架”和“大小”一词,以便在应用约束后试图找出如何获得正确原点的人也可以找到这个问题。

标签: ios objective-c


【解决方案1】:

为了在调整大小后获得UIImageView 的正确框架/边界,您需要首先使用[yourImageView layoutIfNeeded] 要求自动布局更新该布局。这将解决您的限制并更新您的yourImage.bounds

[myImageView layoutIfNeeded];
NSLog(@"w: %f, h: %f", myImageView.bounds.size.width, myImageView.bounds.size.height);

【讨论】:

  • 非常感谢!您的评论解决了我的问题。
  • 不幸的是它不适用于不同的尺寸等级。
  • 如果我想对布局变化进行动画处理,同时知道动画后的结束帧怎么办?
  • 看来frame 是正确的选择,因为bounds 只返回0 作为来源。
【解决方案2】:

检查这些方法:

- (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
}

【讨论】:

  • 是的,- (void)viewDidLayoutSubviews 是获取更新尺寸并解决问题的合适位置。非常感谢!
  • @Kibernetik,别忘了打电话给super
  • 感谢您的来信!
  • 这是正确的地方。确保使用frame 而不是bounds
  • @thedp:高度和宽度无关紧要
猜你喜欢
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
相关资源
最近更新 更多