在下面的例子我提到过
-view
(UIView,我将在两个iPad中显示)。
-parentView
(容器UIView将与iPad的分辨率相同)。
-parentViewOfIPadInWhichViewHasMade
:这是已保存视图的iPad的父视图。这将在不同iPad中显示视图时使用。
功能是我在iPad mini中保存视图并保存它将其帧信息存储在服务器上,当从iPad Pro打开应用程序时,它将从服务器获取这些数据并在iPad专业版中显示视图。
如果视图已调整为iPad Pro的全屏和从iPad Mini获取,则这是我的预期输出
iPad Pro 12.9英寸:
view.size
(x:-25.0,y:-25.0,宽度:1416.0,身高:874.0)parentView.size
(x:0.0,y:0.0,宽度:1366.0,身高:824.0)iPad Mini:
view.size
:(x:-25.0,y:-25.0,宽度:1074.0,高度:618.0)parentView.size
:(x:0.0,y:0.0,宽度:1024.0,高度:568.0)得到这个我已经写下面的代码在视图中加载。
viewX = parentView.frame.width * view.origin.x / parentViewOfIPadInWhichViewHasMade!.width
viewY = parentView.frame.height * view!.origin.y / parentViewOfIPadInWhichViewHasMade!.height
viewWidth = parentView.frame.width * view!.frame.width / parentViewOfIPadInWhichViewHasMade!.width
viewHeight = parentView.frame.height * view!.frame.height / parentViewOfIPadInWhichViewHasMade!.height
注意:无法修复视图大小或使用Constraint。
我可以提出一些想法(在编码之前):
1)您的图形/创意设计必须将布局精确地视为UX的观点。经过这项巨大的工作,您可以开始编码。
2)您当然可以在不使用约束的情况下使用代码。作为程序员,你更喜欢做数学而不是使用鼠标。但要小心:使用约束更加灵活,您也可以混合使用代码。
3)一种普遍而深入的方法可以在每个视图中实现layoutSubviews。
例:
override func layoutSubviews() {
super.layoutSubviews()
self.titleLabel?.sizeToFit()
self.subTitle?.sizeToFit()
self.callLabel?.sizeToFit()
if(self.subTitle?.text == nil) {
self.callLabel?.center.y = (self.titleLabel?.center.y)!
}
}
但老实说,对于基本需求,最好使用约束,最后添加一个IBOutlet,以便您可以控制代码,例如自定义视图中的高度:
final func setH(Hconstraint: NSLayoutConstraint!){
var h = Hconstraint!.constant
if (.... add your test based on models, orientation...){
h = H1
}else{
h = H2
}
Hconstraint.constant = h // re-apply height.
self.setNeedsDisplay() // to trigger redraw... seems needed in some cases...
}
(你也可以在控制器中添加这个代码..但最好把它放在自定义视图中,所以逻辑就在那里..)
我们需要使用比例来解决这个问题。
如果我们在ipad pro中保存视图并在ipad mini中打开,那么我们需要从ipad pro parentview设置parentview的高度和宽度。然后将其缩小到ipad mini parentview并计算x和y cordinate change。