【发布时间】:2014-11-16 04:50:33
【问题描述】:
我以编程方式创建了一个自动布局约束,它将标签从其父视图的底部向上移动 25 个点。我在这个场景中没有定义其他约束。 25 在大多数设备上都很好,但在 iPhone 4s 上太高了。对于该屏幕尺寸,我想让它从底部向上大约 15。但是后来我认为获得一个变量常量会好得多,而不是为所有屏幕尺寸强制执行一个固定值,或者尝试为一个特定的屏幕尺寸更改它。但是使用自动布局似乎不可能做到这一点。是吗?
我在想获得变量常量的一种方法是根据屏幕(或视图)高度计算一个值。例如,常数将等于self.view.frame.size.height / 30。在 iPhone 4(仅限纵向)上,它将是 16,iPhone 5 几乎是 19,等等。这将是完美的。或者另一种方式,高度的 3%。不过,这些值对于旋转来说需要是动态的,因为高度会发生变化。
是否可以使用基于某些计算或屏幕/视图高度具有可变常量的自动布局约束?或者是否有其他解决方案可以让我获得所需的行为 - 避免固定的自动布局常量?
这是一些示例代码,来自viewDidLoad:
let footerLabel = UILabel()
footerLabel.text = "my text"
footerLabel.sizeToFit()
footerLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(footerLabel)
self.view.addConstraint(NSLayoutConstraint(item: footerLabel, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 1, constant: -25))
self.view.addConstraint(NSLayoutConstraint(item: footerLabel, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0))
【问题讨论】:
-
当您说以编程方式时,您的意思是您在代码或 Storyboard 中创建了约束?
-
@Spectravideo328 在代码中,在
viewDidLoad -
所以你不能使用:self.myConstraint.constant = myVariableDistanceValue;
-
@Spectravideo328 好吧,我没有存储对约束的引用,在
viewDidLoad它不会知道视图的大小,并且必须在大小更改时更新(旋转) . -
您能出示您的 viewDidLoad 代码吗?
标签: ios swift autolayout nslayoutconstraint