我在Xcode 7中使用Swift和Storyboard。我在同一个视图控制器中有不同的UI和相同的元素。根据从服务器获取的数据,我希望显示不同的UI布局。
为了更容易理解,例如我有一个视图控制器,其中一个标签与视图的底部对齐。在从服务器获取数据时,我想显示具有不同布局的标签:
layout
作为bottom
返回,我会将文字布局应用为align bottom
和centre horizontally
layout
作为centre
返回,我想将文字布局应用为centre vertically
和centre horizontally
因此,如果我有很多元素,我就很难手动编写NSLayoutConstraint。无论如何我仍然可以使用Interface Builder来创建应用于同一视图控制器的不同UI吗?
答案 0 :(得分:0)
之前我遇到过同样的问题并且设法提供了一个解决方案,尽管可能不是苹果的意图。我测试过,它适用于xcode 6和7,也可能是早期版本。您的问题并未说明您是否正在使用笔尖或故事板,但我提供的答案是笔尖。要设置您的笔尖,您需要添加2个视图控制器或更多。按照您需要的方式查看视图控制器并设置视图控制器的主视图标记,以便区分它们。为了能够连接您的IBOutlets,您需要应用一些技巧:
现在你只需要访问你的视图控制器。为此,我使用类方法来获取视图控制器的实例:
+ (UIViewController *)customViewControllerForLayout:(NSInteger)layoutTag
{
NSArray *customViewControllers = [[NSBundle mainBundle] loadNibNamed:@"Your nib's name" owner:self options:nil];
__block UIViewController *customViewControllerWithSpecifiedLayout = nil;
[customViewControllers enumerateObjectsUsingBlock:^(UIViewController *customViewController, NSUInteger index, BOOL *stop) {
if (customViewController.view.tag == layoutTag) {
customViewControllerWithSpecifiedLayout = customViewController;
*stop = YES;
}
}];
return customViewControllerWithSpecifiedLayout;
}