【问题标题】:Change UIImage in runtime affect in missing constraints在运行时更改 UIImage 会影响缺少的约束
【发布时间】:2016-01-23 15:48:11
【问题描述】:

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

每个 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 的新实例?如果不可能...任何人都知道任何解决方法来实现我以编程方式加载之前添加并定位到故事板的随机图像的目标?

谢谢!!

【问题讨论】:

  • 你能告诉我们你的故事板和自动布局约束吗?
  • 如何初始化 UIImage 视图?
  • 不,我没有在代码中初始化 imageView。在运行时影响帖子中显示的该片段中的图像视图的唯一代码。如果我评论这一行: imageView.image = UIImage(named: randomImages[index]) 图像被正确定位...

标签: ios swift uiimage ios9 ios-autolayout


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2018-12-12
    • 2021-06-13
    相关资源
    最近更新 更多