UIImageView,更改.image会导致重新布局 - 可以避免吗?



我有一个班级...

override func viewDidLayoutSubviews()
    {
    showDefaultCustomProcessing()
    }

在一个视图上,用户可以点击并更改图像...

@IBAction func changeDoorTap(t:UITapGestureRecognizer)
    {
    thing.image = UIImage(named:...new image...)
    }

事实证明,每当您更改.image时,它都会重新布局屏幕

(我不知道,但这是有道理的。

所以不幸的是,viewDidLayoutSubviews运行,CustomProcessing返回到默认状态。那可不行。

作为解决方法,我这样做了......

var requestCustomLayoutAfterViewDidLayoutSubviews:Bool = false
@IBAction func changeDoorTap(t:UITapGestureRecognizer)
    {
    saveTemporaryCustomProcessing()
    thing.image = UIImage(named:...new image...)
    requestCustomLayoutAfterViewDidLayoutSubviews = true;
    }
override func viewDidLayoutSubviews()
    {
    performDefaultCustomProcessing()
    if (requestCustomLayoutAfterViewDidLayoutSubviews)
        {
        recoverTemporaryCustomProcessing()
        }
    requestCustomLayoutAfterViewDidLayoutSubviews = false;
    }

使用这样的标志是一种糟糕的模式。

1)有没有办法改变.image但不强制重新布局

(也许,通过在层级别操作它,或者其他什么?

2)您能否"关闭"重新布局,然后再次打开?

有没有办法更改 .image 但不强制重新布局

当然:为 UIImageView 提供宽度约束和高度约束。没有这些,它采用其图像的大小。有了他们,它只是服从约束。

最新更新