我在使用autolayout时遇到了一些麻烦。
我的班级MyView
扩展了UIScrollView
,并在UIImageView
方法中将MyView.view
添加到init
。约束也被设置为子视图
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
作为子视图,并在故事板中设置了约束。
我希望在显示ViewController之前设置UIImage
MyView
的UIImageView
。问题是,我不确定在何处设置图像。
在func viewWillAppear(animated: Bool)
中设置图像时,尚未应用约束。在func viewDidAppear(animated: Bool)
或func updateViewConstraints()
进行设置时,为时已晚......
更新
正如@kdogisthebest指出的那样,在应用约束之前加载图像是可以的,因为子视图会自动调整大小。
不幸的是,UIScrollView
似乎不是这样......我试图将MyView
的超级视图更改为UIView
,并且调整大小如上所述。根据一些快速研究,setTranslatesAutoresizingMaskIntoConstraints(false)
应该做到这一点,但它没有用。
答案 0 :(得分:0)
当应用约束或在更新约束后调用setNeedsUpdateConstraints
时,它将调用layoutSubviews
,它将重绘UIImageView&图片。到新的尺寸。我想稍后调用setImage
会避免不必要的抽奖。
我在表格单元格中做了很多。我在添加约束之前设置了图像。它显示得很好。
需要注意的重要一点是,只要UIImageView的大小发生了变化,无论是约束还是setFrame
,它内部的图像都会重新绘制,以适应UIImageView的大小。