UITableView自动尺寸,UITextView单元格最大尺寸

时间:2017-02-03 14:22:03

标签: ios uitableview

我已经成功创建了包含标签的自定义单元格(自动调整大小)的UITableView和UITextView - detailsTextView。

当禁用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)
   ...
}

3 个答案:

答案 0 :(得分:1)

这个想法很简单。您需要在UITextView's方法中跟踪textViewDidChange高度变化。

然后,如果UITextView超过最大预定义高度,那么您将添加限制UITextView's高度增长的约束。约束应该类似于将UITextView的最小高度设置为最大预定义高度,并启用UITextView的滚动。

答案 1 :(得分:0)

从UI / UX的角度来看,我不会这样做。 使用Scrollview(UITableview)和其他滚动视图(UITextview)是不好的。它可能会使用户感到困惑,因为他可以滚动"文本框"在较小的设备而不是"表"。

但是,您可以使用此解决方案:UITextView change height instead of scroll

另一个解决方案是检查显示0高度的单元格时会发生什么。检查viewWillLayoutSubviews()和IB中的约束。

希望这能让您更接近解决方案/答案。

答案 2 :(得分:0)

如果仅使用自动布局,UITextView只有在禁用滚动时才能定义自己的大小。

您应该尝试避免递归布局传递(例如,当文本视图的高度发生变化,然后安装更多约束,这将导致高度再次改变等等)。

你可以做的是限制textView的maximumNumberOfLines,并提供其他方式来查看全文:正如所指出的那样,在另一个滚动视图中有一个滚动视图是一个非常糟糕的用户体验