2015-11-03 26 views
1

我想作一個簡單的UIScrollView。 爲此,我在其中放置了一個UIView,並將其中的所有組件放在此UIView之內。爲什麼我的UIScrollView裏面的UIView不尊重它的高度限制?

enter image description here

我的問題是,我以編程方式設置的contentSize我UIScrollView(和它完美的作品),但我UIView不尊重這個新的高度......所以,我在底部部件不在我的UIView但在我的UIScrollView

enter image description here

這是一個問題,因爲我UISegmentedControl( 「Consommation /發射」)沒有迴應,違背了測試UISegmentedControl( 「第一/二」),它的工作原理。

我把UIScrollViewUIView,但它不工作之間平等的高度約束...

回答

0

的高度相等約束將使幀的大小相同,但不會導致視圖的高度與內容大小相等。我會創造一個實際的高度約束的觀點,然後做出約束IBOutlet中和更新,當您設置了滾動的contentSize.height像

self.viewHeightConstraint.constant = self.scrollView.contentSize.height; 

無論你要更新你滾動視圖的內容大小是不變的。我會說,使用自動佈局時,通常比設置幀更好地設置或更新約束。設置框架往往會與佈局引擎發生衝突。

enter image description here

找到您通過檢查「相等的高度」框中設置的約束。檢查「高度」框中創建一個IBOutlet。

+0

工作完美,我不知道我們可以製造IBOutlet的限制!謝謝。 – Will

+0

編輯:不幸的是我有約束的問題,我真的不明白:' 「 」' – Will

+0

當您添加顯式高度視圖的約束你是否移除了與scrollview相等的高度? 「」我認爲這一行是問題。這裏你說的是你希望視圖等於scrollview的高度再加上808.你應該移除這個約束,並且爲視圖的高度設置一個絕對的(即不與scrollview關聯)約束。 – beyowulf

0

有一種方法來解決這個問題。 收聽UIScrollViewcontentSize的更改。 當contentsize改變你抓住它,你改變你的子視圖的框架(高度,寬度..)

像這樣:

[scrollView addObserver:self 
      forKeyPath:@"contentSize" 
       options:NSKeyValueObservingOptionNew 
       context:NULL]; 

在這裏你抓住它:

- (void) observeValueForKeyPath:(NSString*)keyPath 
         ofObject:(id)object 
         change:(NSDictionary*)change 
         context:(void *)context { 
    //change subview frame accordingly 
} 
相關問題