【发布时间】:2014-11-17 07:00:34
【问题描述】:
我有一个带有背景图像和标题标题的视图控制器。这种观点大部分时间都保持不变。我有不同的子视图,我将在这个视图控制器中显示和隐藏。
如何使用情节提要实现这一目标?
- 是否必须为每个子视图创建单独的 xib?
- 或者我是否在同一个视图控制器中创建单独的视图并根据需要隐藏和显示它们?
或者还有其他优雅的解决方案吗?
谢谢。
【问题讨论】:
标签: ios objective-c iphone xcode storyboard
我有一个带有背景图像和标题标题的视图控制器。这种观点大部分时间都保持不变。我有不同的子视图,我将在这个视图控制器中显示和隐藏。
如何使用情节提要实现这一目标?
或者还有其他优雅的解决方案吗?
谢谢。
【问题讨论】:
标签: ios objective-c iphone xcode storyboard
请看本教程:How to use a 'Container View' in iOS?
整体思路如图所示。
【讨论】:
如果你使用container views.,设计你的用户界面会容易得多
为您的所有子视图添加container view。
在您的主要View Controller 中为所有子container views 创建properties。
在容器view controller 中设计子视图。
在您的主 view controller 中应用业务逻辑以相应地显示和隐藏子视图。
【讨论】:
通常,您不需要为每个子视图创建单独的 xib(从技术上讲,我们可以在同一个故事板上绘制所有视图控制器)。
对于隐藏和显示问题,将子视图设置为 IBOutlet,然后让您的代码决定应该显示哪个视图以及应该隐藏哪个视图。
【讨论】:
添加和删除子视图而不是隐藏和显示会更好。
在同一ViewController 中,您可以使用addSubView: 添加和removeFromSuperView 删除视图
【讨论】:
添加和删除子视图是实现此目的的最佳方式。但是,如果您使用情节提要执行此操作,所有重叠的视图可能看起来很乱,并且难以管理。
实现这一点的最佳方法是以编程方式添加视图,并以编程方式设置布局约束。
UIView *subView = [[UIView alloc]init];
subView.backgroundColor = [UIColor blackColor];
NSDictionary *viewsDictionary = @{@"subView":subView};
NSDictionary *metrics = @{@"offset":@20};
NSArray *heightConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-offset-[subView]-offset-|"
options:0
metrics:metrics
views:viewsDictionary];
NSArray *widthConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-offset-[subView]-offset-|"
options:0
metrics:metrics
views:viewsDictionary];
[self.view addConstraints:heightConstraint];
[self.view addConstraints:widthConstraint];
例如,上面的代码将添加子视图,该子视图的顶部、底部、前导和尾随空间从视图控制器的主视图设置为 20。
【讨论】: