2014-01-13 183 views
2

我有一個UIScrollView包含在另一個容器視圖中,約束設置爲獲取容器視圖的所有空間。這就是說,我沒有固定的寬度或高度滾動視圖。
在我的滾動視圖中,我以編程方式添加子視圖。每個子視圖(內容視圖)都是從xib加載的。
在xib中,我將任意大小設置爲根視圖(500x500),但我希望視圖寬度自動調整爲滾動視圖寬度(滾動視圖寬度是容器寬度)。
我不希望用戶能夠水平滾動。如何將UIScrollView內容大小配置爲固定寬度和動態高度?

我嘗試了不同的解決方案,總是導致滾動視圖水平滾動。
我試圖在橫軸上將內容視圖擁抱和壓縮屬性調整爲不同的值,但沒有成功。

我不想在我的意見上設置固定的寬度,因爲我希望他們採取容器視圖的寬度。

如果您有任何建議,請提前致謝。

回答

3

晚回答我當時提出的問題。
由於我使用Autolayout,VChemezov的答案並不令人滿意。

我的內容視圖有一組頂部,底部,主要寬度的約束。 (寬度而不是尾隨,這是我一開始做的事,但它不工作)。

所以現在我有這樣的事情:

 NSLayoutConstraint *leading = [NSLayoutConstraint 
             constraintWithItem:messageView 
             attribute:NSLayoutAttributeLeading 
             relatedBy:NSLayoutRelationEqual 
             toItem:self.conversationScrollView 
             attribute:NSLayoutAttributeLeading 
             multiplier:1.0f 
             constant:0.0f]; 
     NSLayoutConstraint *width = [NSLayoutConstraint 
             constraintWithItem:messageView 
             attribute:NSLayoutAttributeWidth 
             relatedBy:NSLayoutRelationEqual 
             toItem:self.conversationScrollView 
             attribute:NSLayoutAttributeWidth 
             multiplier:1.0f 
             constant:0.0f]; 
     [self.conversationScrollView addConstraints:@[ top, leading, width ]]; 

隨着內容視圖等於滾動視圖的寬度的寬度。

+0

這幫助了我,我只是想補充具有自己內心的看法(消息查看在這種情況下),你可以複製在故事板這種行爲連接到所有四個scrollView的兩側,但然後添加一個相等的寬度約束到scrollView。如果scrollView連接到超級視圖,則會自動將contentView的寬度設置爲超級視圖的寬度。還處理定位更新。 – BreadicalMD

2

Autolayout不會調整UIScrolView中的視圖大小。你應該自己佈局和調整這些視圖的大小。有兩種基本的解決方案:

  • 明確設置子視圖的寬度增加它的UIScrollView
  • 子類的UIScrollView並重寫SETFRAMElayoutSubviews前這樣

    @implementation MyScrollView 
    
    - (void)setFrame:(CGRect)frame{ 
        [super setFrame:frame]; 
        [self setNeedsLayout]; 
    } 
    
    - (void)layoutSubviews{ 
        [super layoutSubviews]; 
        NSArray * subviews=self.subviews; 
        for(UIView * view in subviews){ 
         CGRect viewFrame=view.frame; 
         viewFrame.size.width=self.bounds.size.width; 
         view.frame=viewFrame; 
        } 
    } 
    
    @end 
    
1

使用SnapKit它甚至更快:

let helper = UIView() 
scrollView.addSubview(helper) 

helper.snp.makeConstraints { make in 
    make.width.equalTo(snp.width) 
    make.leading.trailing.top.equalToSuperview() 
    make.height.equalTo(0) 
} 
+0

+1,因爲這絕對是現在走的路。 2014 => 2017.使用SnapKit或PureLayout,但不要使用原生Autolayout API(除非你有太多時間)。 – florian

相關問題