如果有人能够展示如何使用iOS 7中引入的UITableViewController的topLayoutGuide和bottomLayoutGuide属性,我将不胜感激。谢谢。
答案 0 :(得分:16)
topLayoutGuide
和bottomLayoutGuide
属性继承自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
指的是内容的最低垂直范围。