2

我最近开始开发一个带有单点触控的 iOS 应用程序。我的问题是关于布局过程。目前我所有的超级视图决定子视图获得多少空间。

override void LayoutSubviews()
{
    this.subview1.Frame = new RectangleF(new PointF(0,0), new SizeF(10, 10));
    this.subview2.Frame = new RectangleF(new PointF(0, 15), new SizeF(10, 10));
}

但现在我试图显示一个UITableView高度取决于内容。那么告诉 Superview 我需要特定高度的正确方法是什么?

我在弹出窗口中显示 a 时遇到了同样的问题UITableView。UIPopoverController 接受另一个 UIViewController 并将其显示在 Popover 中。UIPopoverController告诉我需要特定尺寸的适当方式是什么?

4

3 回答 3

0

感谢所有回复,尽管他们没有完全解决我的问题。但现在我想我有一个解决方案。

iOS 本身不支持自下而上的布局过程。所以层次结构顶部的元素应该触发布局过程并询问它的子视图它想要多大。因此,如果新数据来自您的业务模型,ViewController 首先必须处理它,然后将其推送到呈现数据的 tableView。之后,他触发布局过程并询问 tableView 它必须有多大才能在不滚动的情况下呈现所有数据(只需通过ContentSize属性获得所需的大小)。

我也不知道的是,有一个特殊的属性可以用于将视图控制器显示在 Popover 中所需的大小ContentSizeForViewInPopover。iOS 中集成了一种机制,您可以在其中监听对属性所做的更改。PopoverController 侦听对此属性所做的更改并自动调整自己的大小以适应此 Size。因此,您在 ContentViewController 中所要做的就是设置ContentSizeForViewInPopover属性的值,然后 PopoverController 会自动调整大小。

于 2013-03-24T13:48:47.343 回答
0

这应该不会太难:

  • 将父视图/弹出框实例传递给您的UITableViewSource,这可以通过其构造函数、公共属性或字段等。
  • 当您需要在表格源中修改父控件的大小形式时,您应该有权访问其FrameContentSize属性来执行此操作

这能解决您的问题吗?

于 2013-03-16T18:10:07.217 回答
0

在 UITableView 的情况下,您应该覆盖 UITableViewSource 的 GetHeightForRow 方法。此方法在渲染之前为每个单元格运行并返回其高度。

因此,您可以直接根据单元格底层数据源或单元格视图计算高度(您可以通过 NSpath 属性从表中引用它)

于 2013-03-19T15:11:29.280 回答