我有一个名为profile的视图,该视图在情节提要中采用(0,0,320,60)大小,该视图占据了全角但高度为60,并且我试图在其中放置另一个名为rank的视图,该视图的中心是iPhone4s,5s,6s ,6它只应以我的观点为中心。

这是我尝试过的:

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


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

最佳答案

您可以通过以下方法使用自动版式:

+ (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]];

10-08 05:57
查看更多