edgesForExtendedLayout

edgesForExtendedLayout

我已经阅读了很多有关iOS7 UI过渡的内容。

我无法获得这三个属性automaticallyAdjustsScrollViewInsetsextendedLayoutIncludesOpaqueBarsedgesForExtendedLayout

例如,我试图使我的 View Controller 在状态栏下方启动,但我无法实现。

最佳答案

从iOS7开始, View Controller 默认使用全屏布局。同时,您可以更好地控制其布局 View 的方式,这可以通过以下属性完成:

EdgesForExtendedLayout

基本上,使用此属性可以设置可以扩展 View 的哪一部分以覆盖整个屏幕。想象一下,您将UIViewController插入了UINavigationController。当布局该 View Controller 的 View 时,它将在导航栏结束的地方开始,但是此属性将设置可以扩展 View 的哪一侧(顶部,左侧,底部,右侧)以填充整个屏幕。

让我们看一个例子:

UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

在这里,您没有设置edgesForExtendedLayout的值,因此采用默认值(UIRectEdgeAll),因此 View 扩展了其布局以填充整个屏幕。

结果如下:

如您所见,红色背景在导航栏和状态栏的后面延伸。

现在,您要将该值设置为UIRectEdgeNone,因此您要告诉 View Controller 不要将 View 扩展为覆盖屏幕:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

结果是:



自动调整ScrollViewInsets

当您的 View 是UIScrollView或类似名称(例如UITableView)时,使用此属性。您希望表格从导航栏结束处开始,因为如果没有,您将看不到整个内容,但是同时您希望表格在滚动时覆盖整个屏幕。在这种情况下,将edgesForExtendedLayout设置为None将不起作用,因为您的表将在滚动条结束处开始滚动并且不会在其后面滚动。

这是此属性派上用场的地方,如果您让 View Controller 自动调整插图(将此属性设置为YES,也是默认值),它将在表格顶部添加插图,因此表格将在导航位置开始条结束,但滚动条将覆盖整个屏幕。

这是设置为“否”的时间:

和是(默认情况下):

在这两种情况下,表格都在导航栏后面滚动,但在第二种情况下(YES),它将从导航栏下方开始。

extendedLayoutIncludesOpaqueBars

该值只是先前值的附加值。默认情况下,此参数设置为NO。如果状态栏是不透明的,则即使您将 View 扩展为覆盖状态,也不会将 View 扩展为包括状态栏(edgesForExtendedLayoutUIRectEdgeAll)。

如果将值设置为YES,这将允许 View 再次进入状态栏下方。

如果不清楚,请写评论,然后我会回答。

iOS如何知道要使用的UIScrollView?

iOS会在ViewController的 View 中获取第一个 subview ,即索引0处的 subview ,如果它是UIScrollView的子类,则将解释的属性应用于该 View 。

当然,这意味着UITableViewController在默认情况下有效(因为UITableView是第一个 View )。

关于ios - 解释iOS7中的AutomaticAdjustsScrollViewInsets,extendedLayoutIncludesOpaqueBars,edgesForExtendedLayout之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18798792/

10-09 12:27