我试图为某些练习重新创建默认的iOS键盘。我使用可视化格式语言来创建一些约束,如下所示:
var row1Constraint = NSLayoutConstraint.constraintsWithVisualFormat("|-row1_LeftEdgeX-[button01(buttonWidth)]-buttonGapX-[button02(buttonWidth)]-buttonGapX-[button03(buttonWidth)]-buttonGapX-[button04(buttonWidth)]-buttonGapX-[button05(buttonWidth)]-buttonGapX-[button06(buttonWidth)]-buttonGapX-[button07(buttonWidth)]-buttonGapX-[button08(buttonWidth)]-buttonGapX-[button09(buttonWidth)]-buttonGapX-[button10(buttonWidth)]-row1_RightEdgeX-|",
options: NSLayoutFormatOptions(0),
metrics: metrics,
views: views)
view.addConstraints(row1Constraint)
该限制适用于纵向模式,我也有景观模式的约束。我使用一个非常简单的 if(view.bounds.width == CGFloat(320))来确定方向,它工作得很好。这些约束在一个名为 setButtonConstraints()的函数中,我称之为:
override func viewWillLayoutSubviews() {
view.removeConstraints(view.constraints())
setButtonConstraints()
}
这很好用,这就是构建和运行代码时键盘的样子:
当我第一次旋转设备时,约束是完美无缺的:
但是,当我将设备旋转回纵向模式时,会出现问题,其行末尾的所有UIButton都会消失,如下所示:
对Landscape的下一个方向改变将再次完美无瑕,但在另一轮方向改变之后,肖像很好但是景观最终看起来像这样:
这发生在模拟器和设备上。我一直在摸不着头脑,试图弄清楚为什么约束会像这样。任何帮助都会非常赞赏!