我已经成功创建了包含标签的自定义单元格(自动调整大小)的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)
...
}
答案 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
,并提供其他方式来查看全文:正如所指出的那样,在另一个滚动视图中有一个滚动视图是一个非常糟糕的用户体验