另一个视图内的中心视图

时间:2015-11-08 09:44:51

标签: ios objective-c

我有一个名为profile的视图,它在故事板中占用(0,0,320,60)大小,它占据了全宽但高度为60的高度,我正在尝试在其中心放置另一个名为排名的视图,该设备是什么iPhone4s,5s,6s,6它应该只是我的视图并把它放在中心。

这是我试过的:

ranking.frame = CGRectMake(0, 0, 120, 60);
ranking.center = self.Profile.center;

当前代码并非在我的视图中居中所有设备。我该怎么做才能动态地做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用以下方法使用AutoLayout:

+ (void)centerView:(UIView *)view inContainerView:(UIView *)containerView withSuperView:(UIView *)superView
{
    [superView addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]];
    [superView addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]];
}

您可以在ViewController或帮助程序类中添加上述方法。 在您的视图上使用AutoLayout之前,请务必将translatesAutoresizingMaskIntoConstraints属性设置为false。

因此,如果ranking是您的子视图而self.Profile是您的超级视图,则可以执行以下操作。

UIView *ranking = [[UIView alloc] init];
ranking.translatesAutoresizingMaskIntoConstraints = false;
[self.Profile addSubview:ranking];
[[self class] centerView:ranking inContainerView:self.Profile withSuperView:self.Profile];
[self.Profile addConstraint:[NSLayoutConstraint constraintWithItem:ranking attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:120]];
[self.Profile addConstraint:[NSLayoutConstraint constraintWithItem:ranking attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:60]];