如何设置 UIViewController “扩展边缘”属性

Posted

技术标签:

【中文标题】如何设置 UIViewController “扩展边缘”属性【英文标题】:How to set UIViewController "extend edges" properties 【发布时间】:2013-09-18 14:42:13 【问题描述】:

我在 Storyboard 中看到以下选择,用于在 navBars/tabBars 下扩展 UIViewController 视图的边缘:

但是如何在代码中为我的所有 ViewController 全局设置这些属性?与手动检查/取消检查 Storyboard 中的每个 ViewController 不同。

【问题讨论】:

【参考方案1】:

ios7 中有几个新属性可以控制这些设置。

edgesForExtendedLayout 告诉应该扩展哪些边(左、右、上、下、全部、无或这些的任意组合)。延伸底边等于“Under Bottom Bars”记号,延伸顶边等于“Under Top Bars”记号。

extendedLayoutIncludesOpaqueBars 告诉边缘是否应该在不透明条下自动扩展。因此,如果您将这两个设置结合起来,您就可以在代码中模拟界面构建器刻度的任意组合。

【讨论】:

对不起,我找不到这两个,我需要在哪里寻找它们?非常感谢。 这两个是每个 UIViewController 子类的属性。因此,如果您有一个名为 mainViewController 的 MainViewController 实例,您只需编写 mainViewController.extendedLayoutIncludesOpaqueBars = YES;等等。 这对我有用,但我必须把它放在 viewDidLoad 中。它在 viewWillAppear 中不起作用。谢谢! Swift 代码... self.edgesForExtendedLayout = [ UIRectEdge.top, UIRectEdge.left, UIRectEdge.right ] 很老的把戏,但在 2022 年有效。【参考方案2】:

如果您不想扩展到任何边缘,只需添加:

let viewController = UIViewController()
viewController.edgesForExtendedLayout = []

【讨论】:

【参考方案3】:

在 Objective-C 中:

- (void) viewDidLoad 
   [super viewDidLoad];
   [self initVars];


- (void) initVars 
   self.edgesForExtendedLayout = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeRight | UIRectEdgeBottom;
   self.extendedLayoutIncludesOpaqueBars = YES;

你想要的属性是:

self.edgesForExtendedLayout = UIRectEdgeTop | UIRectEdgeBottom;

【讨论】:

以上是关于如何设置 UIViewController “扩展边缘”属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在通用 UIViewController 之后设置自定义 UIViewController?

如何从另一个 UIViewController 更改分段控件标题(设置)

使用 RXSwift 的警报消息的 UIViewController 扩展

如何在xib中为不同的UIViewcontroller设置不同的导航栏颜色?

如何设置 UIViewController 显示在导航栏的后退按钮上?

UIViewController 扩展从情节提要中实例化