【问题标题】:How to make sure uiview looks same in different ipads without using constraints如何在不使用约束的情况下确保 uiview 在不同的 ipad 中看起来相同
【发布时间】:2019-02-02 16:51:28
【问题描述】:

在下面的例子中我提到了

-view(我将在两个 iPad 上显示的 UIView)。

-parentView(与 iPad 分辨率相同的容器 UIView)。

-parentViewOfIPadInWhichViewHasMade : 这是已保存视图的 iPad 的父视图。这将在不同 iPad 中显示视图时使用。

功能是我在 iPad mini 中保存视图并保存它将其框架信息存储在服务器上,当从 iPad pro 打开应用程序时,它将从服务器获取这些数据并在 iPad pro 中显示视图。

如果视图已调整为 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, width : 1366.0, height : 824.0)

iPad 迷你版:

  • view.size : (x : -25.0,y : -25.0, 宽度 : 1074.0, 高度 : 618.0)
  • parentView.size : (x : 0.0, y : 0.0, width : 1024.0, height : 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

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

【问题讨论】:

  • 设置要显示的视图的静态宽度和高度与所有 ipad 相同,并将该视图的中心设置为父视图的中心
  • 该视图可以调整大小并在 iPad 屏幕的任何位置移动。所以无法解决任何问题。
  • 为什么不能使用约束?这正是你所需要的......
  • 因为用户可以在屏幕中的任何位置移动视图,并且我正在从代码中的按钮添加视图,并且首先没有添加任何约束。 @J.Doe。
  • @Venkadesh 非常感谢您的建议............非常感谢

标签: ios swift ipad uiview frame


【解决方案1】:

我可以提出几个想法(在编码之前..):

1) 您的图形/创意设计必须准确地将布局视为用户体验的观点。完成这项繁重的工作后,您就可以开始编码了。

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

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

【讨论】:

  • 我将无法使用约束,因为用户可以添加他/她想要的任意数量的视图。在用户添加视图的添加按钮上,它们没有应用约束。所以我更喜欢编码,因为我认为我已经接近解决方案,但缺少一些我无法找到的东西。
  • 好的,所以唯一的方法是在自定义视图中使用 layoutSubviews。
  • 我认为您建议的代码对我没有帮助,因为我将拥有许多可以移动到屏幕上任何位置的 uiview。我已经在使用自定义视图。我通过设置它的框架来设置它在父视图中的位置。可以通过平移调整大小或移动
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-01-05
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多