在下面的示例中,我提到了
-view
(我将在两台iPad上显示的UIView)。
-parentView
(与iPad分辨率相同的容器UIView)。
-parentViewOfIPadInWhichViewHasMade
:这是已保存视图的iPad的父视图。将在不同的iPad中显示视图时使用。
功能是我将视图保存在iPad mini中,并将其保存在服务器中,并将其框架信息存储在服务器中;当从iPad Pro打开应用程序时,它将从服务器中获取这些数据并在iPad Pro中显示视图。
这是我的预期输出,如果视图已调整为全屏iPad Pro并从iPad Mini中获取
12.9英寸iPad Pro:
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
注意:无法固定视图的大小或使用约束。
答案 0 :(得分:0)
在编码之前,我可以提出一些想法:
1)您的图形/创意设计必须准确地将布局视为UX的角度。完成这项巨大的工作后,您就可以开始编码了。
2)您当然可以在不使用约束的情况下使用代码。作为一名程序员,您cn喜欢做数学而不是使用鼠标。但请注意:使用约束更加灵活,您也可以混合使用代码。
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...
}
(您也可以在控制器中添加此代码。但是最好将其放在自定义视图中,因此逻辑就在其中。)
答案 1 :(得分:0)
我们需要使用规模解决此问题。
如果我们已经在ipad pro中保存了视图并在ipad mini中打开了,则需要从ipad pro parentview设置parentview的高度和宽度。然后将其缩小到iPad mini父视图并计算x和y坐标变化。