我在IB一个UIView有内它的另一个UIView的,我现在用的容器视图。 在代码中,我创建三个不同的意见,然后根据应用程序的状态动画适当的一成容器的视图。 只有三个不同的视图中的一个将在任何给定的时间有效。 问题是,当我在模拟器上不同的iPhone的运行,我的新子视图不调整来匹配容器视图。 我使用的自动布局。 出于测试目的,我已经建立了我的子视图只是一个大按钮具有约束到上海华所有它的边缘。 和容器观点也有它的边缘约束到它是上海华。 我要的是为子视图相匹配的容器的视图。 即,按钮拉伸容器视图的整个尺寸。 当在不同的iPhone上运行的容器视图,因此子视图的大小应该按比例增减相对于不同的iPhone的屏幕尺寸。
下面是我用我的初始化和子视图设置相对于容器查看它的约束代码。
UIView *containerView = self.subView;
UIView *newSubview = [[mySubview alloc] init];
[newSubview setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.containerView addSubview:newSubview];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0]];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0]];
我只是似乎无法得到这个工作。 我是相当新的自动版式,我不知道我做错了,想停下敲我的头靠在这堵墙。 任何帮助将是了不起的。 :)
************* 附加信息 **************
对不起,我没有很清楚,因为我可以有说我的问题。 因此,这里是屏幕截图一些更多的信息。 首先,我将介绍我做了什么代码明智。
在AppDelegate.m didFinishLaunchingWithOptions,我创建这样MyViewController,
self.myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
在viewDidLoad中在MyViewController.m,我创建mySubview并将其添加到我的containerView,创建这样它的限制,
UIView *containerView = self.containerView;
UIView *mySubview = [[MySubview alloc] init];
[mySubview setTranslatesAutoresizingMaskIntoConstraints:NO];
[containerView addSubview:mySubview];
NSDictionary *views = NSDictionaryOfVariableBindings(mySubview);
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[mySubview]|"
options:0
metrics:nil
views:views]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[mySubview]|"
options:0
metrics:nil
views:views]];
最后在MySubview.h初始化我添加笔尖作为这样一个子视图,
- (id)init
{
if(self = [super init])
{
NSArray *nibArray = [[NSBundle mainBundle]loadNibNamed:@"MySubview" owner:self options:nil];
[self addSubview:[nibArray objectAtIndex:0]];
}
return self;
}
几件事情要注意,可能会有帮助,
在MyViewController.xib,我有我使用的containerView一个UIView。 它有一个IBOutlet到的UIView * containerView,是一个上面提到。 我有在IB的containerView唯一限制是,导致,拖尾和底部空间的SuperView和顶部空间的SuperView = 44。
对于MySubview.xib,高度和宽度是300,(无约束被用于高度或宽度)。 我觉得这些大小,因为mySubview应该接受限制为containerView不应该的问题。
在MySubview.xib我有3个目的,topButton:高度= 29,middleView:高度= 242和bottomButton:高度= 29(参见附图)TopButton已经领先,拖尾和顶部的SuperView约束和一个底部middleView约束。 MiddleView了开头和结尾,以上海华约束和一个顶部topButton约束和底部bottomButton约束。 最后bottomButton一直领先,尾随和底部的SuperView约束和一个顶部middleView约束。
我希望发生的是mySubview规模,以适应containerView因为限制已经创建并添加而是mySubview变得非常大,剪辑containerView。
下面是一些屏幕截图:
MyViewController.xib,标题下的蓝色长方形是我的容器视图,并有IBOutlet中containerView。
MySubview.xib
最后,结果,这是不正确的。
相反,我想这一点,这是我伪造的目的只是为了让屏幕截图。
在iPhone 4,
在iPhone 5,
正如你可以在假屏幕截图看到,mySubview缩放以适应containerView,甚至containerView比例被调整为不同的手机屏幕尺寸。
希望我没有与信息太过火。 任何帮助将是了不起的。 我觉得我很接近,但必须缺少一个关键步骤。 Grrrrr。