iOS中具有不同屏幕尺寸的自动布局

自动版面很棒。 只需声明约束,然后根据其父级的bounds更改相应地调整视图的大小。 但是有时候看起来不太好,因为我们对填充,宽度,高度甚至字体大小都有固定的值。

这可以使用Size Class某种程度上解决。 size class的想法是,我们有许多约束集,并且基于设备特征,我们启用了其中一些约束。 在Storyboard中这样做比较方便(尽管很难推理),但是如果我们在代码中做(我偏爱的方式),那么很多代码。 很多代码意味着很多错误。

如果您看一下iOSRes,我们会看到16:9height:width

  • iPhone SE(320 x 568):1.775
  • iPhone 6(375 x 667):1.778
  • iPhone 6+(414 x 736):1.778

它们大多数具有相同的比率。 因此,我们可以采用一种简单的方法,即根据比率缩放元素。 考虑到设计师通常为iPhone 6 size设计的事实,我们可以以此为基础。

在这种方法中,内容将根据其比例放大或缩小。 您可能会争辩说,更大的手机的想法是显示更多,而不是更大地显示相同的内容。 您可能是对的,在这种情况下,您需要创建不同的约束和不同的UI。 但是,如果您想使用简单的解决方案,这就是其中之一。

这是我在进行Windows Phone development时使用的技术,但它也适用于许多平台

 设备类{ 
//以磅为单位的基本宽度,使用iPhone 6
静态让步基数:CGFloat = 375静态变量比:CGFloat {
返回UIScreen.main.bounds.width / base
}
}

我们可以有一个称为adjusted的计算属性,它可以根据比率调整大小

 扩展程序CGFloat {变量已调整:CGFloat { 
返回自身* Device.ratio
}
}扩展名Double {变量已调整:CGFloat {
返回CGFloat(self)* Device.ratio
}
} extension Int {调整为var:CGFloat {
返回CGFloat(self)* Device.ratio
}
}

您可以根据需要进行任意调整

  label.font = UIFont.systemFont(ofSize:23.adjusted)phoneTextField.leftAnchor.constraint(equalTo:container.leftAnchor,constant:30.adjusted), 
phoneTextField.rightAnchor.constraint(等于:container.rightAnchor,常数:-30.adjusted),imageView.widthAnchor.constraint(equalToConstant:80.adjusted),imageView.heightAnchor.constraint(equalToConstant:90.adjusted),

原始故事https://github.com/onmyway133/blog/issues/35