如何在 iOS 中以编程方式从基本 UIViewController 向我的所有视图控制器添加视图

Posted

技术标签:

【中文标题】如何在 iOS 中以编程方式从基本 UIViewController 向我的所有视图控制器添加视图【英文标题】:How to add a view to all of my view controllers from base UIViewController programmatically in iOS 【发布时间】:2016-03-11 06:52:59 【问题描述】:

我的应用中有四个视图控制器,它们都是从一个通用的 UIViewController 类扩展而来的。我想在底部为我的所有视图控制器添加一个视图。

现在我正在像这样在基本视图控制器的 viewDidLoad 方法中添加该视图

UIView *contentView = [[UIView alloc]initWithFrame:self.view.frame];
UIView *wrapperView = [[UIView alloc]initWithFrame:self.view.frame];
UIView *commonView = [[UIView alloc]init];
commonView = <common view>;
[contentView setTranslatesAutoresizingMaskIntoConstraints:NO];
[wrapperView setTranslatesAutoresizingMaskIntoConstraints:NO];


wrapperView.backgroundColor = [UIColor blueColor];
contentView.backgroundColor = [UIColor greenColor];

contentView = self.view;
[wrapperView addSubview:contentView];
[wrapperView addSubview:commonView];
self.view = wrapperView;

当我关闭特定情节提要的自动布局时,这一切正常。但是当我启用自动布局时,我在屏幕上显示绿色(contentView)。

在上面的代码运行之前,视图控制器有9个自动布局约束,在上面的代码sn-p之后,self.view没有约束

有没有办法把self.view的自动布局约束加回来?

【问题讨论】:

您用于commonViewframe 参数是什么?与viewDidLoad 一样,视图布局尚未完成。它可能会在以后发生更改并导致错误放置的视图。 @Zhi-WeiCai 在启用自动布局时除了内容视图之外什么都没有。 【参考方案1】:

删除这一行:

contentView = self.view;

该行导致 contentView 的初始化(代码的第一行)本质上是无操作的。

为什么在添加视图时尝试重置整个布局?看来您可以初始化 commonView 并将其直接添加到 self.view:

UIView *commonView = [[UIView alloc] init];
commonView = <common view>;
[self.view addSubview:commonView];

【讨论】:

我想从 .xib/.storyboard 文件中获取所有内容以及公共视图。

以上是关于如何在 iOS 中以编程方式从基本 UIViewController 向我的所有视图控制器添加视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ios 应用程序中以编程方式获取任何站点上图像的 url?

如何在 ios 中以编程方式添加约束

iOS 如何在 AppDelegate 中以编程方式设置侧边栏菜单?

如何在 iOS 中以编程方式启用睡眠模式?

如何在 iOS 中以编程方式禁用/启用睡眠模式?

如何在 iOS 7 中以编程方式正确关闭 UIAlertView?