Pop*_*nel 6 cocoa-touch ipad ios swift swift-playground
我无法弄清楚如何在Swift Playgrounds for iPad中布置视图,尽管这可能也与Mac用户有关.
下面的代码应该创建一个视图中,带有红色正方形(也有观点)即它的超级视图的边缘附近,但不接触他们.
let v = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))
let sqv = UIView(frame: CGRect(x: 400, y: 400, width: 50, height: 50))
sqv.backgroundColor = .red
v.addSubview(sqv)
PlaygroundPage.current.liveView = v
Run Code Online (Sandbox Code Playgroud)
结果不是你所期望的:
我怀疑我知道这里发生了什么; 实时视图的大小固定,大于显示区域.当视图充当实时视图时,将忽略视图的某些特征.但是,我无法找到文档中提到的位置,这让我感到烦恼.更重要的是,我该如何处理?我希望能够布局简单的UI,这些UI会根据实时视图的当前大小进行更改.我不知道如何在没有反复试验和硬编码的情况下解决这个问题,这是我真正想避免的两件事.
我怀疑我知道这里发生了什么; 实时视图的大小固定,大于显示区域.
实际上它更像是另一种方式.iPad屏幕宽1024点(横向).右侧窗格(显示您的实时视图)宽512点.操场强制您的根视图(v
)填充该窗格,在左侧,右侧和顶部(以及底部的更多位置)插入40个点.因此,您的根视图的宽度被强制为432(= 512 - 2*40),小于您指定的500.
在代码中创建的视图(与您的一样)具有translatesAutoresizingMaskIntoConstraints = true
,并且调整大小掩码为0,这意味着在调整其父级的大小时,根本不调整视图的帧.因此,操场将根视图的大小调整为宽度432,但您的根视图不会移动或调整其子视图(sqv
)的大小.
最简单的解决方法是设置子视图的自动调整遮罩,以表示您保留在根视图的右下边缘附近的意图.这意味着它应具有灵活的左上边距和左边距:
let v = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))
let sqv = UIView(frame: CGRect(x: 400, y: 400, width: 50, height: 50))
sqv.autoresizingMask = [.flexibleLeftMargin, .flexibleTopMargin]
sqv.backgroundColor = .red
v.addSubview(sqv)
PlaygroundPage.current.liveView = v
Run Code Online (Sandbox Code Playgroud)
结果:
let sqv = UIView(frame: CGRect(x: UIScreen.mainScreen().bounds.width-50-1, y:400, width: 50, height: 50))
Run Code Online (Sandbox Code Playgroud)
上面的代码将子视图放置在距主视图右侧 1 点的位置。尝试将 x 中 50 之后的值 1 更改为所需值。
归档时间: |
|
查看次数: |
5840 次 |
最近记录: |