如何确保uiview在不使用约束的情况下在不同的ipads中看起来相同

问题描述 投票:0回答:2

在下面的例子我提到过

-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。

ios swift ipad uiview frame
2个回答
0
投票

我可以提出一些想法(在编码之前):

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...
}

(你也可以在控制器中添加这个代码..但最好把它放在自定义视图中,所以逻辑就在那里..)


0
投票

我们需要使用比例来解决这个问题。

如果我们在ipad pro中保存视图并在ipad mini中打开,那么我们需要从ipad pro parentview设置parentview的高度和宽度。然后将其缩小到ipad mini parentview并计算x和y cordinate change。

© www.soinside.com 2019 - 2024. All rights reserved.