帧与边界和自动布局约束?

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 屏幕与前一种情况相同。为什么?

谢谢。

Dav*_*ton 5

Q) **a)**为什么无论我运行哪个屏幕,帧大小都显示为 600*536。例如。如果我在 4s 屏幕或 iPad 屏幕上运行它,它的打印结果是一样的吗?

**b)**它总是在我的故事板中推断出我的 VC 的大小!!。例如。如果我在 3.5 英寸 VC 中设计屏幕,则框架尺寸变为 320.0*416.0。

这将取决于您何时检查内容视图(或视图控制器的主视图)的大小。如果您要检查viewDidLoad()方法中的大小,您会看到它是您在 Interface Builder 中看到的大小。这是它在情节提要中保存的大小,并且尚未针对设备调整大小。

但是,如果您检查viewDidAppear()方法中的大小,它应该是适合设备屏幕的大小。

如果你真的想直接处理框架,你可能想在viewDidLayoutSubviews(). 此时,视图将针对设备调整大小,您可以获取更新的测量值并修改框架。尽管通常最好只是正确设置约束,然后让自动布局进行更改。