在运行时更改UIImage会影响缺少的约束

时间:2016-01-23 15:48:12

标签: ios swift uiimage ios9 ios-autolayout

我在iOS 9(Swift)中在一个视图中显示了一组八个imageView,并且我添加了设置imageViews位置的约束。

每个ImageView都会从资源文件中加载一个图像,该文件已手动设置为故事板中的每个文件。

一切正常,现在我想在运行时将随机资产设置为imageViews ...

var images = ["T","B","J","R","R2","I","M","RL"]
var randomImages = images
var indexCount = UInt32(images.count)

for imageView in TopImages{
    let index:Int = Int(arc4random_uniform(indexCount))
    imageView.image = UIImage(named: randomImages[index])
    randomImages.removeAtIndex(index)
    indexCount -= 1
}

当这段代码运行时,imageViews处于与我在故事板中设计的位置不同的位置......似乎当我以编程方式设置ImageView.image = UIImage(...)时,我缺少约束

是否可以在运行时更改资产名称而无需执行新的UIImage实例?如果它不可能......任何人都知道任何解决方法来实现我以编程方式加载随机图像的目标,这些图像是先前添加到故事板中的吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

自动布局使用每个视图的intrinsicContentSize结合添加的约束来计算布局。您可以在运行时更改imageView中的图像,但之后需要在每个UIImageView上调用invalidateIntrinsicContentSize,然后在包含视图的循环调用layoutIfNeeded之后作为最后一步,以便在考虑新更改的情况下再次放置所有内容。