如何将视图/对象固定在不同iPhone大小的相对相同位置?

时间:2016-03-27 15:34:16

标签: ios iphone autolayout

如下图所示,在不同的iPhone尺寸(4",4.7",5.5")上,蓝色和红色视图仍处于相同的相对位置,但仍可向下滚动获得更多空间来显示更多信息,该怎么做?

我对如何使用滚动视图实现此功能感到困惑。非常感谢您的帮助! enter image description here

1 个答案:

答案 0 :(得分:0)

根据@Azat的建议,我们可以使用" UIScreen.mainScreen()。bounds.height"在运行时根据不同的iPhone大小获得不同的高度,从而可以在相对固定的位置动态布局我们的视图。有关上述问题描述的示例:

  1. 将红色和蓝色视图放在堆栈视图中,使它们成为一个实体
  2. 计算场景高度:UIScreen.mainScreen()。bounds.height
  3. 远离场景的上边缘计算我们需要堆叠视图的顶部距离(即将红色和蓝色视图组合在一起)
  4. 让我们假设,除了我们可以看到的第一个应用启动界面,我们想向下滚动以查找更多内容,添加了额外的橙色视图
  5. 我们希望将橙色视图放在场景的正下方,其底部距离滚动视图底边20点
  6. 在故事板中
  7. ,将scrollView固定到视图边缘,将堆栈和橙色视图固定在视图的顶部和尾部,将红色,蓝色和橙色视图的高度固定为120点(可以更改高度)你喜欢)
  8. 对于1,2,3,4,5,我们可以在函数中编写代码并在viewDidLoad中调用它,如:

        func viewLayout() {
        let bottomMargin:CGFloat = 20.0
        let sceneHeight = UIScreen.mainScreen().bounds.height
        let topDistance = sceneHeight - stackView.frame.height - bottomMargin
        let metric = ["topDistance": topDistance, "bottomMargin": 20.0]
        let views = ["stackView": stackView, "orangeView": orangeView]
    
        NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-topDistance-[stackView]-bottomMargin-[orangeView]-bottomMargin-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: metric, views: views))
        }
    

    因此,无论您使用何种iPhone尺寸,堆叠视图始终布置在场景底部,距离底部20个点,您可以向下滚动以查看橙色视图。