为了账号安全,请及时绑定邮箱和手机立即绑定

解释iOS 7中自动调整-ScrollViewInset、ExtendedLayout-

解释iOS 7中自动调整-ScrollViewInset、ExtendedLayout-

森林海 2019-07-19 10:10:27
解释iOS 7中自动调整-ScrollViewInset、ExtendedLayout-OpaqueBars、EDgesFortendedLayout之间的差异我读了很多关于iOS 7 UI转换的文章。我无法得到这三个属性automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout??例如,我试图让我的视图控制器从状态栏下面开始,但我无法实现它
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

从iOS 7开始,视图控制器默认使用全屏布局。同时,您可以更好地控制视图的布局方式,而这些属性就是这样完成的:

EDgesfortendedLayout

基本上,使用这个属性,您可以设置视图的哪些边可以扩展到覆盖整个屏幕。想象一下你推一个UIViewController变成UINavigationController..当该视图控制器的视图被放置时,它将从导航栏结束的位置开始,但该属性将设置视图的哪些边(上、左、下、右)可以扩展以填充整个屏幕。

让我们举一个例子来看看:

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

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

结果是:

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

现在,您要将该值设置为UIRectEdgeNone,因此,您要告诉视图控制器不要将视图扩展到屏幕上:

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

其结果是:

自动调整ScrollViewInset

视图为UIScrollView或者类似的,就像UITableView..您希望您的表从导航栏结束的位置开始,因为如果没有,您将不会看到整个内容,但同时希望您的表在滚动时覆盖整个屏幕。在这种情况下,设置edgesForExtendedLayout因为您的表将开始滚动导航条结束的位置,并且它不会在其后面滚动,因此对任何操作都不起作用。

下面是这个属性的方便之处,如果您让视图控制器自动调整inset(将此属性设置为yes,也是默认值),它将嵌入添加到表的顶部,因此表将从导航条结束的位置开始,但滚动将覆盖整个屏幕。

此时设置为“否”:

和“是”(默认情况下):

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

扩展LayoutIncludeesOpaqueBars

这个值只是对以前的值的一个补充。默认情况下,此参数设置为否。如果状态栏是不透明的,则视图将不会扩展到包含状态栏,即使您扩展视图以覆盖它(edgesForExtendedLayoutUIRectEdgeAll).

如果将值设置为“是”,这将允许视图再次位于状态栏下。

如果有什么不清楚的地方,写一篇评论,我会回答的。

IOS如何知道使用什么UIScrollView?

IOS获取ViewController视图中的第一个子视图,即索引0处的子视图,如果它是UIScrollView然后将解释的属性应用到它。

当然,这意味着UITableViewController默认情况下工作(因为UITableView是第一个视图)。


查看完整回答
反对 回复 2019-07-19
?
largeQ

TA贡献2039条经验 获得超7个赞

不确定是否使用情节提要,但如果使用,则让视图控制器从状态栏(以及底部栏上方)开始:

在IB中选择视图控制器,在“属性”检查器中,取消选择“在顶部条下扩展边缘”和“在底部条下扩展边缘”。


查看完整回答
反对 回复 2019-07-19
  • 3 回答
  • 0 关注
  • 458 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信