G.A*_*sek 1 frames bounds ios autolayout swift
我最近阅读了一个关于视图的框架和边界属性的精彩问题 - UIView frame, bounds and center。我也尝试使用自动布局对此进行更多实验,现在我发现自己处于一个非常矛盾的场景中。请耐心等待,因为这可能需要一点时间。
我会一一强调它们,所以请帮助我克服所有这些 -
我拥有的?——
带有约束的视图层次结构如下 - (设计是在默认的 ViewController 大小为 600*600 上完成的)
我试图打印出这些视图的框架和边界 -
内容视图
print(contentView.frame)// o/p - (0.0, 64.0, 600.0, 536.0)
print(contentView.bounds)//o/p- (0.0, 0.0, 600.0, 536.0)
Run Code Online (Sandbox Code Playgroud)
Q) **a)**为什么无论我运行哪个屏幕,帧大小都显示为 600*536。例如。如果我在 4s 屏幕或 iPad 屏幕上运行它,它的打印结果是一样的吗?
**b)**它总是在我的故事板中推断出我的 VC 的大小!!。例如。如果我在 3.5 英寸 VC 中设计屏幕,则框架尺寸变为 320.0*416.0。
**c)**因为它固定到视图的所有边,所以它应该与视图大小相同,并且它始终保持固定到边缘。那么为什么它的大小不一样self.view.frame.width*self.view.frame.height
侧面图
print(sideView.frame)//o/p - (520.0, 86.0, 80.0, 128.0)
print(sideView.bounds)//o/p - (0,0, 80.0, 128.0)
Run Code Online (Sandbox Code Playgroud)
问)如果我以编程方式设计自定义 UIView
let TestView = UIView(frame: CGRectMake(520.0, 86.0, 80.0, 128.0))//Mark:its frame is exactly same as sideView.frame
TestView.backgroundColor = UIColor.redColor()
self.contentView.addSubview(TestView)
Run Code Online (Sandbox Code Playgroud)
所以这里的 sideView(contentView 的子视图)应该被 TestView 替换,但不是 & o/p 屏幕与前一种情况相同。为什么?
谢谢。
Q) **a)**为什么无论我运行哪个屏幕,帧大小都显示为 600*536。例如。如果我在 4s 屏幕或 iPad 屏幕上运行它,它的打印结果是一样的吗?
**b)**它总是在我的故事板中推断出我的 VC 的大小!!。例如。如果我在 3.5 英寸 VC 中设计屏幕,则框架尺寸变为 320.0*416.0。
这将取决于您何时检查内容视图(或视图控制器的主视图)的大小。如果您要检查viewDidLoad()方法中的大小,您会看到它是您在 Interface Builder 中看到的大小。这是它在情节提要中保存的大小,并且尚未针对设备调整大小。
但是,如果您检查viewDidAppear()方法中的大小,它应该是适合设备屏幕的大小。
如果你真的想直接处理框架,你可能想在viewDidLayoutSubviews(). 此时,视图将针对设备调整大小,您可以获取更新的测量值并修改框架。尽管通常最好只是正确设置约束,然后让自动布局进行更改。