如何设置 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设置不同的导航栏颜色?