topLayoutGuide和bottomLayoutGuide UIViewController属性的示例

时间:2013-07-30 23:32:24

标签: uitableview ios7

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

1 个答案:

答案 0 :(得分:16)

topLayoutGuidebottomLayoutGuide属性继承自UIViewController并实现UILayoutSupport协议。它们旨在与AutoLayout一起使用,但也可以在不使用AutoLayout的情况下直接使用。

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

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

  

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

     

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

     

•容器视图控制器中的视图控制器未设置此项   财产的价值。相反,容器视图控制器约束   表示的值:

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

  •   
  • 状态栏的底部,如果只有一个   状态栏可见

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

  •   

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

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

使用bottomLayoutGuide与使用topLayoutGuide完全相同,只是bottomLayoutGuide指的是内容的最低垂直范围。