2015-09-23 145 views
2

我有一個UIScrollView是顯示UIImageViews。基於用戶以前保存了多少圖像,ImageViews在運行時以編程方式插入。我得到以下錯誤:自動佈局錯誤無法同時滿足約束與UIScrollView

無法同時滿足約束。

以下列表中的至少一個約束可能是您不想要的一個 。嘗試這一點:(1)看看每個約束,並嘗試找出你不期望的 ; (2)找到添加了不想要的約束或約束並修復它的代碼。 (注意:如果你看到 NSAutoresizingMaskLayoutConstraints,你不明白,請參閱 到文檔中的UIView財產 translatesAutoresizingMaskIntoConstraints)

"<NSLayoutConstraint:0x17029cd90 H:[UIView:0x15cd31e70]-(0)-| (Names: '|':UIScrollView:0x15cd326b0)>", 
"<NSLayoutConstraint:0x17029d060 UIScrollView:0x15cd326b0.trailingMargin == UIView:0x15cd31e70.trailing>" 

我做到哪裏了滾動被固定在基本的自動佈局的東西所有四方都在0分。然後我添加一個contentView作爲UIScrollView的子視圖(普通的UIView),它也被固定在所有四邊的0點。

EDIT故事板約束圖像

storyboard constraints on UIScrollview set to 0 on all sides to superview with Descendent constraints set to 0 to contentView

我請內容查看的寬度在代碼如下所示:

CGSize pagesScrollViewSize = self.scrollView.frame.size; 

     NSDictionary *views  = @{ @"contentView"  : self.contentView}; 

     NSDictionary *metrics = @{ @"width"   : @(pagesScrollViewSize.width * self.mutableArray.count) }; 

     NSArray *constraints; 
     constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[contentView(width)]-|" options:0 metrics:metrics views:views]; 
     [self.scrollView addConstraints:constraints]; 

[self loadVisiblePages]; 

的的UIImageViews加入像這樣的UIImageViews基於數量加入其中在發生ViewController的segue時設置的頁面。

-(void)loadVisiblePages{ 

     CGRect frame = self.scrollView.bounds; 
     frame.origin.x = frame.size.width * self.page; 
     frame.origin.y = 0.0f; 

     ImageForArchiving *newImageObject = (ImageForArchiving*)self.mutableArray[page]; 
     UIImage *imageForNewPageView = newImageObject.image; 

     UIImageView *newPageView = [[UIImageView alloc] initWithFrame:frame]; 
     [newPageView setTranslatesAutoresizingMaskIntoConstraints:YES]; 
     newPageView.contentMode = UIViewContentModeScaleAspectFit; 
     newPageView.image = imageForNewPageView; 
     [self.scrollView addSubview:newPageView]; 

     [self.pageViews replaceObjectAtIndex:page withObject:newPageView]; 
    } 
} 

此外,當我滾動UIScrollView時,顯示的圖像在旋轉時會不規則地改變大小。我認爲這只是上述警告的結果,而且我還沒有放棄UIImageView。上述警告在這種情況下意味着什麼,我該如何解決?

+0

您添加了哪些約束將contentView固定到scrollView? –

+0

ContentView固定在所有4邊的滾動視圖中。因此,contentView的左側固定爲0點的左側滾動視圖,contentView的各個側面固定爲UIScrollView。 contentView和UIScrollView之間沒有其他限制 – noobsmcgoobs

回答

2

看來你已經將scrollView的拖尾拖動到了contentView.trailing。 將scrollView.Trailing Margin更改爲此約束的scrollView.Trailing 您可以在選擇約束後在故事板的活動檢查器中執行此操作。

或者,清除您的contentView的所有約束。然後同時加入牽制約束再次取消Constrain to margins並設置所有常量0

更改這行代碼中的

NSArray *constraints; 
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[contentView(width)]-|" options:0 metrics:metrics views:views]; 
    [self.scrollView addConstraints:constraints]; 

與此:

NSArray *constraints; 
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView(width)]|" options:0 metrics:metrics views:views]; 
    [self.scrollView addConstraints:constraints]; 

使用@"H:|-[contentView(width)]-|"在視覺格式意味着固定您的contentView到超視圖的邊緣,並添加一個空間在superView和subView之間爲8點。在你的故事板約束中,你已經使用UIScrollView的Trailing和Leading邊設置了約束,而在程序中增加了使用Trailing Margin和Leading Margin的約束(要求contentView保持8點的填充)。因此,衝突。

檢查視覺格式語法here

+0

您是否可以看到具有所示故事板中約束條件的更新?由於它似乎被固定在超視圖上,我不確定尾部邊緣。也許我的理解不正確? – noobsmcgoobs

+0

這是scrollView還是contentView?另外,您是否在固定contentView時取消選中「限制邊距」? –

+0

ScrollView和是的,我沒有勾選'約束到邊緣' – noobsmcgoobs

相關問題