2017-02-03 335 views
1

我已經成功地創建了包含標籤和UITextView - detailsTextView的自定義單元格(自動大小)的UITableView。UITableView自動尺寸與UITextView單元格的最大尺寸

當scrollTextView被禁用時,根據textView的文本正確調整單元格大小。 但是,我不希望具有非常大的單元格並設置單元格的最大高度(並在達到最大單元格高度時啓用滾動以查看detailsTextView)。

我該如何做到這一點? 啓用滾動以獲取詳細信息時,單元格的TextView自動調整將其縮小到0高度(在IB中通過最小高度約束覆蓋),但它仍不能填充我規劃的單元格的最大大小。

override func viewDidLoad() { 
    mainTableView.rowHeight = UITableViewAutomaticDimension 
    mainTableView.estimatedRowHeight = 200 
    self.mainTableView.register(UINib.init(nibName: EventCell.nibName, 
              bundle: Bundle.main), 
           forCellReuseIdentifier: EventCell.cellIdentifier) 
    ... 
} 

回答

1

這個想法很簡單。您需要跟蹤UITextView's高度變化textViewDidChange方法。

然後,如果UITextView超過您的最大預定義高度,那麼您將添加一個限制高度增長的限制條件。約束應該是將UITextView的最小高度設置爲最大預定義高度,並啓用UITextView的滾動。

+0

謝謝 - 這實際上是回答我的問題,但根據其他建議,從用戶體驗角度來看這是一個糟糕的做法。我會嘗試別的。謝謝! – izik461

0

從UI/UX的角度來看,我不會那麼做你正在做的。 有一個滾動視圖(UITableview)與其中的另一個滾動視圖(UITextview)是不好的。它可能會混淆用戶,因爲他可以在較小的設備上滾動「文本框」而不是「表格」。

但是,你可以用這個解決方案去:UITextView change height instead of scroll

另一種解決辦法是檢查時被顯示爲0的高度細胞會發生什麼。檢查viewWillLayoutSubviews()和IB中的約束。

希望這能讓你更接近解決方案/答案。

0

如果您僅使用自動佈局,則UITextView只有在禁用滾動的情況下才能定義其自身大小。

你應該儘量避免遞歸佈局傳遞(例如,當文本視圖的高度發生變化,然後安裝更多的約束,這會導致高度再次發生變化等等)。

你可以做的是限制你的textView的maximumNumberOfLines,並提供其他方法來查看全文:正如它指出的,在另一個滾動視圖中有一個滾動視圖是一種非常糟糕的用戶體驗習慣。