iOS中具有不同屏幕尺寸的自动布局
自动版面很棒。 只需声明约束,然后根据其父级的bounds
更改相应地调整视图的大小。 但是有时候看起来不太好,因为我们对填充,宽度,高度甚至字体大小都有固定的值。
这可以使用Size Class
某种程度上解决。 size class
的想法是,我们有许多约束集,并且基于设备特征,我们启用了其中一些约束。 在Storyboard中这样做比较方便(尽管很难推理),但是如果我们在代码中做(我偏爱的方式),那么很多代码。 很多代码意味着很多错误。
如果您看一下iOSRes,我们会看到16:9
( height: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