【问题标题】:UITableView automatic dimension with UITextView max size of cell带有 UITextView 最大单元格大小的 UITableView 自动尺寸
【发布时间】:2017-02-03 14:22:02
【问题描述】:

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

当 detailsTextView 的滚动被禁用时,单元格会根据 textView 的文本正确调整大小。 但是,我不希望有非常大的单元格并设置单元格的最大高度(并在达到最大单元格高度时启用 detailsTextView 的滚动)。

我怎样才能做到这一点? 当为 detailsTextView 启用滚动时,单元格的自动调整大小会将其缩小到 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)
   ...
}

【问题讨论】:

    标签: ios uitableview


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢-这实际上是对我的问题的回答,但根据其他建议,从用户体验的角度来看,这是一种不好的做法。我会尝试别的。谢谢!
    【解决方案2】:

    如果你只使用自动布局,不幸的是,UITextView 只能在禁用滚动时定义它自己的大小。

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

    您可以做的是限制 maximumNumberOfLines 的 textView,并提供其他方式来查看全文:正如所指出的,在另一个滚动视图中包含滚动视图是一种非常糟糕的 UX 做法。

    【讨论】:

      【解决方案3】:

      从 UI/UX 的角度来看,我不会做你想做的事。 有一个滚动视图(UITableview)和另一个滚动视图(UITextview)是不好的。它可能会使用户感到困惑,因为他可以在较小的设备上滚动“文本框”而不是“表格”。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-27
        • 1970-01-01
        • 1970-01-01
        • 2011-08-30
        • 1970-01-01
        • 1970-01-01
        • 2012-06-04
        相关资源
        最近更新 更多