我应该何时使用iOS自动布局初始化子视图

时间:2015-09-05 14:05:51

标签: ios autolayout nslayoutconstraint

我在使用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)应该做到这一点,但它没有用。

1 个答案:

答案 0 :(得分:0)

当应用约束或在更新约束后调用setNeedsUpdateConstraints时,它将调用layoutSubviews,它将重绘UIImageView&图片。到新的尺寸。我想稍后调用setImage会避免不必要的抽奖。

我在表格单元格中做了很多。我在添加约束之前设置了图像。它显示得很好。

需要注意的重要一点是,只要UIImageView的大小发生了变化,无论是约束还是setFrame,它内部的图像都会重新绘制,以适应UIImageView的大小。