【发布时间】:2015-09-05 04:52:01
【问题描述】:
我这几天一直在摆弄这个问题,但我似乎无法正确解决。
我正在尝试构建一个类似于以下模型的 UITableView:
- 外部布局:UITableViewCell
- 红色布局:带有单个 UIView 的独立 .xib UIView
- 蓝色布局:内部布局。如第二个单元格中所述,其中几个应该能够存在于单个 Red 布局中,彼此重叠。
据我所知,这是在 UI 上进行布局的最佳方式。但是,无论我尝试什么,我似乎都无法获得单元格的高度(对于 GetHeightForRow 方法)。
加载和添加视图不是问题,问题在于加载它们之后,用数据填充不同的 UI 元素,并获取它们的大小。
我尝试过使用 SizeToFit,但它似乎影响的唯一元素是 UILabels。即使当 UILabel 的框架更改为 300 高度并且我在包含标签的 UI 上调用 SizeToFit 时,它(UIView)仍然保持在 320x100。这意味着当它被渲染时,它看起来完全不对。
我试图计算高度的方式与https://stackoverflow.com/a/18746930/2520789 接受的答案中的第 4 点非常相似。也就是说,在内存中创建一个单元格,并用每一行的数据填充它,然后获取该单元格的高度。
【问题讨论】:
-
几个问题:首先你需要支持iOS 8及以下还是你需要支持iOS 8及以上?其次,您是在做基于 XIB/Storboard 的 View Contollers 还是所有代码?第三,您是否在视图定义中使用自动布局?
-
首先:支持iOS8以下会很好,但不需要。第二:我正在使用 Storyboards 来制作视图控制器。对于所有其他单独的视图,我正在制作单独的 xib。第三:据我了解,Autolayout 基本上是附加视图约束,并让视图“解析”自己的 Frame 和 Bounds。在这种情况下,是的。
-
首先要注意的是原型单元格没有大小类,所以如果你有特定于大小类的字体等,它们往往会布局错误。你可以通过添加 contentView 来解决这个问题单元格到表格,进行大小调整并将其删除。其次,对于 UILabel,您需要设置
preferredMaxLayoutWidth使其以正确的宽度换行:默认情况下,任何大小类都不能以 600 结束。第三,确保 UILabel 最大行数为 0,并且我总是添加表单高度 >=(最小高度)的高度约束,以便它知道它可以在其包含的视图中垂直增长。
标签: c# ios uitableview xamarin