不同设备尺寸的 iOS 自动布局约束值
Posted
技术标签:
【中文标题】不同设备尺寸的 iOS 自动布局约束值【英文标题】:iOS Auto Layout constraints values for different devices sizes 【发布时间】:2016-05-18 19:07:31 【问题描述】:我使用故事板来布局我的视图。我定位带有约束的视图。我有一个关于调整约束大小的问题。如何在不编写 if/else 循环的情况下为不同的设备尺寸设置不同的约束常数。有没有办法在故事板中设置它?我对父布局有一个最高约束,例如常数值为 10。这对于 iPhone 5 屏幕来说没问题,但在 iPhone 6/6 plus 屏幕上它应该高于 10。所以应该计算约束。目前我计算一个比例因子是这样的:
let bounds = UIScreen.mainScreen().bounds;
let width = bounds.size.width;
let scaleFactor = width/320; // 320 because base design was created for iPhone 5
// calc top constraint connect from storyboard
self.topConstraintView.constant = self.topConstraintView.constant * scaleFactor;
这种方式在处理不同设备上的约束时是否正确?
【问题讨论】:
在界面生成器中不能执行此操作是否有特定原因?更改班级规模并为您要支持的班级设置约束。 如何在界面生成器中为不同的设备尺寸设置不同的约束常数?我不知道该怎么做。 在界面构建器中,您无法使用相同的 xib 进行操作,没有通过更改设备类型来实现约束的选项 好的,谢谢你的帮助,我想是的。但是有没有办法在界面构建器中设置相对于边距的约束,以便它在更高的屏幕上单独缩放? 【参考方案1】:用DeviceLayout
https://github.com/cruisediary/DeviceLayout怎么样
只需使用IBInspectable
为每个设备大小设置常量,无需任何代码
【讨论】:
我故意违反 cmets 规则说“谢谢”。这是优雅而简洁的。做得很好@cruz。【参考方案2】:通常,您可以使用类大小的常见 600x600 来实现,您还可以构建通用 (iPad/iPhone) 界面。你可以找到大量的指南来实现它。取决于您想要实现什么(细节不佳,更多文本..),并且可能的问题之一是正确处理方向布局(横向/纵向),因为在大型设备中,您必须多次将视图/对象居中.
有时更好,(不丢失细节,图像质量..)根据不同的设备尺寸实现不同的xib,尤其是当您必须使用自定义tableViewCells,imageViews时。
在底部有不同尺寸的 iPhone:
【讨论】:
非常感谢您的回答。是的,这就是我使用的故事板文件的类型。我的视图大小为 600x600。但是当我将 ui 元素的顶部约束设置为 10 时,它在所有设备屏幕上都是 10。 iPhone 5 的尺寸很好,但在大于 iPhone 5 的 iPhone 上,常数应该高于 10。对不起,但我不知道,如何更好地解释它:(。是这里唯一使用的解决方案不同设备尺寸的不同 xib? 我知道使用大小类,您可以根据设备大小在不同设备上显示/隐藏元素,但是约束常量呢?我想在不同的设备上设置不同的约束常量。 不,使用自动布局,您可以将顶部约束设置为名为 topMyViewConstraint 的 IBOutlet,并根据您在问题中的要求使用 topMyViewConstraint.constant = 10 + 因素检查设备类型对其进行修改 关于下一条评论,只需将您要修改的所有约束设置为 IBOutlets,您就可以在代码中使用它们,但请注意保存初始值,以便您可以返回原始尺寸 好的,非常感谢您的解释。因此,如果我想根据设备屏幕更改约束常量,我必须在代码中执行此操作。我计算不同设备的常数的方式是否正确?以上是关于不同设备尺寸的 iOS 自动布局约束值的主要内容,如果未能解决你的问题,请参考以下文章
Android 屏幕适配屏幕适配通用解决方案 ⑥ ( 约束布局 ConstraintLayout 百分比布局方案 | 将设计稿尺寸自动转为约束布局百分比标签属性 | 将输出结果设置到组件标签中 )
Android 屏幕适配屏幕适配通用解决方案 ⑥ ( 约束布局 ConstraintLayout 百分比布局方案 | 将设计稿尺寸自动转为约束布局百分比标签属性 | 将输出结果设置到组件标签中 )