我有一个班级...
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 提供宽度约束和高度约束。没有这些,它采用其图像的大小。有了他们,它只是服从约束。