【发布时间】:2015-12-01 13:14:15
【问题描述】:
我在使用自动布局时遇到了一些问题。
我的类MyView 扩展UIScrollView 并在init 方法中将UIImageView 添加到MyView.view。约束也设置到子视图
self.imageView.setTranslatesAutoresizingMaskIntoConstraints(false)
let views:[NSObject : AnyObject] = ["imgView": self.imageView]
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[imgView]-0-|", options: nil, metrics: nil, views: views))
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[imgView]-0-|", options: nil, metrics: nil, views: views))
我的UIViewController 的子类包含MyView 作为子视图,并且在情节提要中设置了约束。
我想设置MyView 的UIImageView 的UIImage 在 ViewController 出现之前。问题是,我不确定在哪里设置图像。
在func viewWillAppear(animated: Bool) 中设置图像时,尚未应用约束。当设置在func viewDidAppear(animated: Bool)或func updateViewConstraints()时,来不及了……
更新:
正如@kdogisthebest 指出的那样,在应用约束之前加载图像是可以的,因为子视图会自动调整大小。
不幸的是,UIScrollView 似乎并非如此...我试图将MyView 的超级视图更改为UIView,并且调整大小的工作如所述。根据一些快速研究,setTranslatesAutoresizingMaskIntoConstraints(false) 应该可以解决问题,但它不起作用。
【问题讨论】:
-
这真的很重要吗?您已将 UIImageView 的所有侧面固定到它的超级视图。无论如何,它都会是那个大小。如果您在此之前设置图像,它将适合图像并重新绘制,就像您刚刚设置它一样。现在唯一的区别是图像的加载方式:网络或本地。
-
是的,它将是superview的大小,但是superview的大小不正确,因为尚未应用约束
-
当应用约束时,它会调用
layoutSubviews,这将重绘 UIImageView 和图像。到新尺寸。我在表格单元格中经常这样做。我在添加约束之前设置了图像,它显示得很好。
标签: ios autolayout nslayoutconstraint