2014-10-01 23 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 
}