2017-02-03 168 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,并提供其他方法来查看全文:正如它指出的,在另一个滚动视图中有一个滚动视图是一种非常糟糕的用户体验习惯。