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

时间:2018-08-28 06:23:10

标签: ios swift ipad uiview frame

在下面的示例中,我提到了

-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

注意:无法固定视图的大小或使用约束。

2 个答案:

答案 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坐标变化。