2014-10-01 71 views
2

我有一个UIImageView,我需要在改变方向和屏幕尺寸时扩展(高度和宽度)。我正在使用自动布局约束。展开自动布局中改变方向和屏幕尺寸的意见

topImageView.contentMode = UIViewContentModeScaleAspectFit; 
    topImageView.backgroundColor = [UIColor clearColor]; 
    topImageView.layer.cornerRadius = 5.0f; 
    topImageView.clipsToBounds = YES; 
    topImageView.translatesAutoresizingMaskIntoConstraints = NO; 

    if(login_DO.logoPath) 
     [topImageView loadImage:login_DO.logoPath]; 

    [self.view addSubview:topImageView]; 

    NSArray *horizontalConstraints = 
    [NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|-(%i)-[topImageView(%f)]",X_OFFSET,VIEW_FRAME_WIDTH-X_OFFSET*2] 
              options:0 metrics:nil views:@{@"topImageView": topImageView}]; 

    NSArray *verticalConstraints = 
    [NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"V:|-(%f)-[topImageView(80)]",navHeight] 
              options:0 metrics:nil views:@{@"topImageView": topImageView}]; 

    [self.view addConstraints:horizontalConstraints]; 
    [self.view addConstraints:verticalConstraints];  

    NSLayoutConstraint *leadingMarginForImageConstraint = [NSLayoutConstraint 
               constraintWithItem:topImageView attribute:NSLayoutAttributeLeadingMargin 
               relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:self.view attribute: 
               NSLayoutAttributeLeadingMargin multiplier:1.0 constant:X_OFFSET]; 

    NSLayoutConstraint *topMarginForImageConstraint = [NSLayoutConstraint 
                  constraintWithItem:topImageView attribute:NSLayoutAttributeTopMargin 
                  relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:self.view attribute: 
                  NSLayoutAttributeTopMargin multiplier:1.0 constant:VIEW_FRAME_WIDTH-X_OFFSET*2]; 

    [self.view addConstraints:@[ leadingMarginForImageConstraint, 
           topMarginForImageConstraint]]; 

但图像没有扩大。我是新来的自动布局。我是否缺少任何约束?

+0

任何意见或答案? – Nitish 2014-10-01 09:54:25

+1

您的约束无效_______________ 假设x = 10;宽度= 300; _______________ left = -x;宽度> = -300。 _______________ 与高度相同,就像您在宽度和高度上翻转图像一样。 _______________ 解释更多你想要实现..会相应地添加一个答案。 – 2014-10-04 13:21:34

+0

添加一个屏幕短.. ..如果可能解释。 – 2014-10-04 13:29:26

回答

5

您可以将imageBottomConstraint从-navHeight更改为底部的其他值。 避免使用VIEW_FRAME_WIDTH,导致它在更改方向时发生更改。

UIView *superview = self.view; 
NSLayoutConstraint *imageTopConstraint = [NSLayoutConstraint 
                constraintWithItem:topImageView attribute:NSLayoutAttributeTop 
                relatedBy:NSLayoutRelationEqual toItem:superview 
                attribute:NSLayoutAttributeTop multiplier:1.0 constant:navHeight]; 
    NSLayoutConstraint *imageBottomConstraint = [NSLayoutConstraint 
                constraintWithItem:topImageView attribute:NSLayoutAttributeBottom 
                relatedBy:NSLayoutRelationEqual toItem:superview 
                attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-navHeight]; 
    NSLayoutConstraint *imageLeftConstraint = [NSLayoutConstraint 
                constraintWithItem:topImageView attribute:NSLayoutAttributeLeft 
                relatedBy:NSLayoutRelationEqual toItem:superview attribute: 
                NSLayoutAttributeLeft multiplier:1.0 constant:X_OFFSET]; 
    NSLayoutConstraint *imageRightConstraint = [NSLayoutConstraint 
                constraintWithItem:topImageView attribute:NSLayoutAttributeRight 
                relatedBy:NSLayoutRelationEqual toItem:superview attribute: 
                NSLayoutAttributeRight multiplier:1.0 constant:-X_OFFSET]; 
[superview addConstraints:@[imageBottomConstraint , 
          imageLeftConstraint, imageRightConstraint, 
          imageTopConstraint]]; 

更多的帮助检查http://www.tutorialspoint.com/ios/ios_auto_layouts.htm

,或者尝试使用https://github.com/marcoarment/CompactConstraint

让我知道如果它帮助。

+0

你能看到我的相关问题吗?http://stackoverflow.com/questions/26228825/auto-layout-for-iphone-and-ipad。我认为那是我真正想要的,我会相应地编辑这个问题。 – Nitish 2014-10-07 05:24:40

1

我测试了以下代码,它添加了一个带有Globe.png的ImageView,并添加了约束条件,使其与您所描述的一样。所不同的只是掐所有侧边的上海华盈(self.view),然后指定约束的上海华:

-(void)addImageView{ 
    topImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Globe.png"]]; // Added test image 
    topImageView.contentMode = UIViewContentModeScaleAspectFit; 
    topImageView.backgroundColor = [UIColor clearColor]; 
    topImageView.layer.cornerRadius = 5.0f; 
    topImageView.clipsToBounds = YES; 
    topImageView.translatesAutoresizingMaskIntoConstraints = NO; 

    [self.view addSubview:topImageView]; 

    NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:topImageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]; 

    NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:topImageView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]; 

    NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:topImageView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]; 

    NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:topImageView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]; 

    [self.view addConstraints:@[topConstraint, bottomConstraint, leftConstraint, rightConstraint]]; //Note constraints are added to the superView 
}