通过我的自动布局,我正在尝试为最小的屏幕实现一个特殊情况,当我的图标需要更小时。我正在更改traitCollectionDidChange()中图标的约束。但是,改变没有效果。我已经尝试添加SetNeedsLayout,SetNeedsDisplay,UpdateConstraints等,但没有任何作用。
如果我在初始化视图时更改了这些约束,那么更改可以正常工作 - 但是当用户旋转设备并且我需要再次进行更改时,这对我没有帮助。但是,有趣的是,在程序启动时会调用traitCollectionDidChange(),但是如果我在该函数中进行约束更改,则它们不起作用。它们只有在我在视图的init()函数中设置新约束时才有效。
可能是在使用约束之后调用此函数,除了Apple告诉我们将此函数用于此目的,在旋转时更改布局等。我不想使用WillTransitionToSize,因为只使用该函数调用ViewController,而不是视图。但我可能会尝试下一步。
traitCollectionDidChange()肯定会在启动时和旋转时被调用。只是我的改变没有做任何事情。有什么想法吗?
有什么想法吗?
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
// smaller icon constraints for iPhone 5/SE
if let constraint = (self.imageView!.constraints.filter{$0.firstAttribute == .width}.first) {
print("cwide \(constraint.constant)")
if UIScreen.main.bounds.size.width <= 320 {
constraint.constant = 20.0
self.radius = 4
}
else {
constraint.constant = 32.0
self.radius = 8
}
}
self.updateConstraints()
}
答案 0 :(得分:0)
我有一个类似的功能,结果发现我忘记了在界面生成器中安装 约束。