如何在 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的自动布局约束加回来?
【问题讨论】:
您用于commonView
的frame
参数是什么?与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?