如何以针对不同尺寸显示器的模式排列多个 UIView

Posted

技术标签:

【中文标题】如何以针对不同尺寸显示器的模式排列多个 UIView【英文标题】:How to arrange many UIView in a pattern targeting different sized displays 【发布时间】:2017-07-04 11:36:11 【问题描述】:

目标:

针对不同的 iPhone 和 iPad 尺寸的显示器,我想将许多小正方形 UIView 排列成一个图案。一旦安排到位,我希望能够控制每个UIView,以便我可以操纵每个,例如,单独移动和缩放每个。

一种方法是在情节提要上手动放置许多小的UIView(图1),确保有足够的小UIView在最大的iPad屏幕上排列成图案,然后将它们全部连接起来代码。例如

@IBOutlet weak var myView001: UIView!
@IBOutlet weak var myView002: UIView!
...
...
@IBOutlet weak var myView144: UIView!

但是,上面的方法看起来很复杂,不够优雅。

问题:

我怎样才能动态(优雅地)创建许多小的UIView, 可以排列成适合最小的 iPhone 屏幕和 最大的 iPad 屏幕,可以用 Swift 代码操作吗?

图片 1:

【问题讨论】:

如何以编程方式创建视图并使用addSubview 这听起来很有趣,但是我如何以编程方式创建一个UIView,以及如何定位它然后对其进行操作,例如移动或缩放它? 【参考方案1】:

这是一种创建子视图并将其添加到当前视图的方法:

let subview = UIView()
subview.backgroundColor = .black
subview.frame = CGRect(x: 10, y: 10, width: 30, height: 30)
self.view.addSubview(subview)

另一种初始化多个子视图的方式,例如10:

let subviews = (0 ..< 10).map  _ in UIView() 
for i in 0..<10 
    subviews[i].frame = CGRect(x: 10 * i, y: 10, width: 30, height: 30)

您需要识别框架,计算距离和视图的大小,并将它们添加到您当前的视图中。

【讨论】:

谢谢。我理解第一种方法的想法,但第二种方法对我来说并不是很清楚。您能否详细解释“初始化多个子视图”以及如何识别创建的每个子视图? 逻辑与前者类似,但使用起来应该更方便。我更新了我的答案。 非常感谢。这真的很有帮助。是 Swift 2 还是 3? @user4806509 很快 3.

以上是关于如何以针对不同尺寸显示器的模式排列多个 UIView的主要内容,如果未能解决你的问题,请参考以下文章

排列所有相同尺寸的图像

如何使我的自定义 HTML 小部件针对不同的屏幕尺寸显示不同?

针对不同屏幕尺寸在特定像素位置绘制小部件

如何更改以不同显示尺寸显示片段的方式?

Flexbox 布局

如何以不同的 iPhone/ipad 尺寸将我的应用程序上传到 App Store