topLayoutGuide和bottomLayoutGuide UIViewController属性的示例

Ave*_*eon 15 uitableview ios7

如果有人能够展示如何使用iOS 7中引入的UITableViewController的topLayoutGuide和bottomLayoutGuide属性,我将不胜感激.谢谢.

Ste*_*vin 16

topLayoutGuidebottomLayoutGuide属性从继承的UIViewController并实现UILayoutSupport协议.它们设计用于AutoLayout,但也可以直接使用而无需使用AutoLayout.

在这种情况下topLayoutGuide,属性指示您不希望在半透明或透明UIKit栏后面显示的内容的最高垂直范围(例如状态或导航栏).因此,如果您的视图控制器已被推入UINavigationController堆栈,topLayoutGuide将告诉您屏幕顶部有多少点状态栏和导航栏覆盖.您可以UIScrollView在导航栏的正下方使用此值滚动内容,或确保视图中的其他内容未被覆盖UINavigationBar.

请记住,值topLayoutGuide取决于视图控制器以及它是否包含在另一个视图控制器中.来自Apple的UIViewController文档:

约束此属性的值的对象取决于视图控制器是否是容器视图控制器(例如导航或标签栏控制器)的子项,如下所示:

•不在容器视图控制器内的视图控制器约束此属性以指示状态栏的底部(如果可见),或者指示视图控制器视图的上边缘.

•容器视图控制器中的视图控制器不设置此属性的值.相反,容器视图控制器约束值以指示:

  • 如果导航栏可见,则导航栏的底部

  • 如果只显示状态栏,则状态栏的底部

  • 如果状态栏和导航栏都不可见,则视图控制器视图的上边缘

这是我用来移动a UITextField以响应键盘显示的一段代码.我将文本字段移动到导航栏的下方.

CGFloat length = self.topLayoutGuide.length;
_feedback.frame = CGRectMake(_feedback.frame.origin.x, length + 5.0, _feedback.frame.size.width, _feedback.frame.size.height);
Run Code Online (Sandbox Code Playgroud)

使用bottomLayoutGuide与使用完全相同topLayoutGuide,除了bottomLayoutGuide指内容的最低垂直范围.

  • topLayoutGuide是动态生成的值.只有在将视图控制器的视图添加到视图层次结构后才能使用它.使用viewDidLoad将使您在视图添加到视图层次结构之前读取topLayoutGuide,因此返回0.如果在UIViewController的子类中使用topLayoutGuide,则可以可靠地使用它的最早位置是viewDidLayoutSubviews.如果您在UIView的子类中使用它,则可以使用layoutSubviews.你可以在这里阅读所有相关内容:http://goo.gl/Tn6moX (20认同)
  • 我还想指出topLayoutGuide在某些情况下将返回0,如文档中所述.因此,过早阅读其价值非常重要. (2认同)