这似乎比现在更容易。
无论方向如何,我都试图在其绘制的任何iOS设备中将宽高比为1:1(平方)的UIView居中。
详细信息: 我的观点有一个关于timeInterval更新的绘图。我正在使用全屏视图并在每次抽奖中计算我的方块。在方向改变时,整个观点都变成了地狱。我假设如果视图是方形的,我可以信任方向更改动画。
我的约束反复失败,这就是为什么它看起来应该更容易:
View (Square)
Constraints
aspect 1:1
Constraints
View.centerX = centerX
View.centerY = centerY
View.leading ≥ leadingMargin + 5 @ 800
View.top ≥ Top Layout Guide.bottom + 5 @ 800
trailingMargin ≥ View.trailing + 5 @ 800
Bottom Layout Guide.top ≥ View.bottom + 5 @ 800
我拥有250岁的内容拥抱优惠 我的内容抗压力为750左右
这留下了约束错误:
- 缺少约束:需要约束:X位置或宽度
- 缺少约束:需要约束:Y位置或高度
我的困惑在于我无法锁定到一个维度,因为在旋转时我需要锁定另一个维度。
如上所述......这似乎应该更容易。 将一个边界为5的正方形UIView置于较薄的维度中心 (纵向为5面,横向为5面,顶部和底部)
建议热烈赞赏,解释将无济于事。
答案 0 :(得分:1)
这是我刚刚放在一起的方法。我无法在IB中完全执行此操作,但至少运行时代码仅限于激活/停用约束,而不必添加/删除或计算/更改任何大小。
在我的故事板中,我有一个带有以下约束的内部UIView
我为最后四个约束创建了IBOutlets,这是我的视图控制器 -
class ViewController: UIViewController {
@IBOutlet var leadingConstraint: NSLayoutConstraint!
@IBOutlet var trailingConstraint: NSLayoutConstraint!
@IBOutlet var topConstraint: NSLayoutConstraint!
@IBOutlet var bottomConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.setConstraintsForSize(self.view.frame.size)
}
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
self.setConstraintsForSize(size)
}
func setConstraintsForSize(size:CGSize) {
if (size.width > size.height) {
self.leadingConstraint.active=false;
self.trailingConstraint.active=false;
self.topConstraint.active=true;
self.bottomConstraint.active=true;
} else {
self.leadingConstraint.active=true;
self.trailingConstraint.active=true;
self.topConstraint.active=false;
self.bottomConstraint.active=false;
}
}
}
适用于iPhone和iPad,包括带窗口/分屏模式的iPad
答案 1 :(得分:0)
广场需要指定其大小。
Square centerX = Parent centerX
Square centerY = Parent centerY
此时,视图居中,但没有任何内容可让autolayout确定视图的大小。
Square width = 200
Square aspect = 1
如果你想让正方形成为父亲宽度的一部分,那也很简单。
Square width = Parent width * 0.5 //or any other multiplier
您需要调整宽度约束,具体取决于您希望方块在横向上的显示方式。
要拥有“可能的最大方块”,您可以以编程方式将宽度约束设置为min(parentWidth, parentHeight)
并调整方向。
或者,leading, trailing, centerX, centerY, and aspect
应该会得到类似的结果。任何一组约束都需要能够在逻辑上确定位置和大小而不会产生歧义。
<强>更新强>:
在IB:
Square centerX = Parent centerX
Square centerY = Parent centerY
Square aspect = 1
在代码中:
if parent width > parent height
Square width = parent height - 2 * margin
else
Square width = parent width - 2 * margin
旋转时调整