在UIScrollView添加多個(gè)subview,但是subview一直不能顯示出來。
約束如下:
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[bgScrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(bgScrollView)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[bgScrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(bgScrollView)]];
[bgScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[topBannerScrollView]|" options:0 metrics:nil views:@{@"topBannerScrollView":self.topBannerScrollView}]];
[bgScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[classityCollectionView]|" options:0 metrics:nil views:@{@"classityCollectionView":self.classityCollectionView}]];
[bgScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[topBannerScrollView(==200)][classityCollectionView(==70)]" options:kNilOptions metrics:0 views:@{@"topBannerScrollView":self.topBannerScrollView, @"classityCollectionView":self.classityCollectionView}]];
觀察它的圖層顯示Scrollable content size is ambiguous。
UIScrollView.png
問題在于用autolayout給UIScrollView設(shè)約束沒有設(shè)置它的contentsize而是根據(jù)subview的大小來自適應(yīng)的,而上面代碼subview的寬度卻又是根據(jù)bgScrollView的邊界來確定的,兩者互相矛盾猛拴,所以必須先設(shè)置好subview的寬度:
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[bgScrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(bgScrollView)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[bgScrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(bgScrollView)]];
for (UIView *view in @[self.topBannerScrollView, self.classityCollectionView ])
{
[bgScrollView addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:bgScrollView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]];
}
[bgScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[topBannerScrollView]" options:0 metrics:nil views:@{@"topBannerScrollView":self.topBannerScrollView}]];
[bgScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[classityCollectionView]" options:0 metrics:nil views:@{@"classityCollectionView":self.classityCollectionView}]];
[bgScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[topBannerScrollView(==200)][classityCollectionView(==70)]" options:kNilOptions metrics:0 views:@{@"topBannerScrollView":self.topBannerScrollView, @"classityCollectionView":self.classityCollectionView}]];
同樣約束subview的寬度和bgScrollView相同,但@"H:|[subview]|"˙這樣約束是有問題的(設(shè)置subview高度同理)蚀狰。
以上愉昆,記開發(fā)過程中遇到的好幾次坑~