使用AutoLayout将UITableView添加为UITableViewCell的子视图

时间:2014-01-09 15:53:06

标签: ios objective-c uitableview autolayout

我实际上遇到了自动布局的问题。我该如何解决这个问题? 我不明白它是什么以及如何解决它。

描述

我正在尝试解决多个问题:

  • 拥有UITableView#1和UITableViewCell的两个子类:HeaderCell和ListSongsCell。
  • 拥有动态单元格高度的UITableView#1。
  • 将UITableView#2作为ListSongsCell的子视图。
  • 具有动态高度的UITableView#2(基于行数)。 UITableView#2的单元格类型只是基本类型(44px高度)。

基本上我在这里尝试做一个tableview的 inception

这是我期待的图像:

http://imageshack.us/a/img703/9374/i7wn.png

实际上我可以使用HeaderCell让UITableView#1拥有动态单元格高度。 HeaderCell的所有约束都在故事板中定义,它基本上只是一个UIImageView。

问题

当我想在UITableView#1中插入ListSongsCell时,我得到了以下日志:

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<_UIScrollViewAutomaticContentSizeConstraint:0x8a8e820 UITableView:0x9275c00.contentHeight{id: 199} == -150.000000>"
)

Will attempt to recover by breaking constraint 
<_UIScrollViewAutomaticContentSizeConstraint:0x8a8e820 UITableView:0x9275c00.contentHeight{id: 199} == -150.000000>

Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

基本上我知道故事板上的约束有问题,但我真的不明白是什么以及为什么。 在我看来,流程是这样的:

  1. 尝试获取ListSongsCell高度
  2. 尝试获取ListSongsCell ContentView高度
  3. 尝试获取UITableView#2 height
  4. 这里有什么问题?如何使用故事板中的约束来解决此错误? 你明白发生了什么吗?

    为什么我要解决这个问题?

    我知道我可以通过其他方式轻松做到:

    • 插入多个单元格,而不是插入一个包含tableview的单元格
    • 只需要一个按下桌面视图的按钮
    • 禁用约束,它基于框架(旧方式)。

    但是我对这个问题非常好奇,我确信我可以通过嵌套 tableview工作获得最终的平滑结果。

    来源

    以下是我用来帮助我解决这个问题的来源。

    示例项目

    在GitHub上查看这个重现问题的示例项目:https://github.com/hefgi/TableViewInTableViewCell

    随意提出您遇到的任何问题(您可以在GitHub上提交问题/提交或在此发表评论)。

0 个答案:

没有答案