簡體   English   中英

UIScrollView自動調整大小contentSize嗎?

[英]UIScrollView autoresize contentSize?

公平的警告,我是iOS的新手,可能缺少明顯的東西。

我有一個帶有幾個字段的UIScrollView ,這些字段的高度可以更改( UITextView可以拉伸以適合文本,可折疊字段等)。 顯然,我希望scrollview contenSize適合內容以便允許滾動。

現在,我將其設置為每次發生更改時都重新計算並設置contentSize ,這很好,但是有更好的方法嗎? 換句話說,如果另一個開發人員現在添加了一個字段並且不記得將其添加到重新計算函數中,除非我弄錯了,即使該字段在scrollview上,scrollview contentSize還是錯誤的? 是否沒有辦法隨着內容的更改而“自動”調整大小?

是的,有一種更好的方法可以通過自動布局實現。 蘋果公司有一個很好的文檔,可以在這里使用帶有滾動視圖的自動布局。 我更喜歡純自動布局的方法,但是要應用該方法,必須確保字段的大小不依賴於滾動視圖的大小,這是有道理的。 但是,請確保您的約束擴展到滾動視圖的所有側面,以便滾動視圖可以確定其內容的大小。

(即@"H:|[textView(==view)]|"@"V:|[textView(50)]|" ,其中'|'表示scrollView,其textView是其子視圖,而'== view '僅指定textView的寬度必須與視圖'view'的寬度相同。)

如果自動布局是您的選擇,那么就選擇它-正如泰勒所說,自動布局為您抽象了調整大小的方法! :)不幸的是我還沒有自動布局的經驗,所以我不能再告訴你更多有關它的信息。

據我所知,沒有自動布局,沒有更好的方法。 沒有像“ sizeToFit”或“ sizeThatFits”這樣的東西可以接管自動調整內容大小的任務。 您必須自己重新計算內容大小。 為此,請使用您的自定義方法來執行此重新計算任務,或者在UIScrollView上查看一些已經為您實現並抽象化的第三方類別。

例如: UIScrollView + MTUIAdditions.m (請參閱UIScrollView (MTUIAdditions)

最好的解決方案

//autoresize scrollView
CGFloat scrollViewHeight = 0.0f;
CGFloat scrollViewWidth = 0.0f;
for (UIView *view in self.scrollView.subviews) {
    CGFloat height = (view.frame.size.height + view.frame.origin.y);
    scrollViewHeight = ((height > scrollViewHeight) ? height : scrollViewHeight);

    CGFloat width = (view.frame.size.width + view.frame.origin.x);
    scrollViewWidth = ((width > scrollViewWidth) ? width : scrollViewWidth);
}

[self.scrollView setContentSize:(CGSizeMake(scrollViewWidth, scrollViewHeight))];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM