我有一个 UIPopOverController,里面有一个 UITableController。我初始化所有元素,想呈现popOver,此时UITable不知道它的大小,所以我无法设置UIpopOver的大小
我也不确定在 UITable 知道它的大小之后我还能在哪里设置 UIPopOver 的大小(我可以尝试在 cellForRowAtIndexPath 中破解它,但这很丑陋
有任何想法吗 ?
我试图定义 didView* 方法,但它们都没有被调用,可能是因为视图位于弹出框内
谢谢
我有一个 UIPopOverController,里面有一个 UITableController。我初始化所有元素,想呈现popOver,此时UITable不知道它的大小,所以我无法设置UIpopOver的大小
我也不确定在 UITable 知道它的大小之后我还能在哪里设置 UIPopOver 的大小(我可以尝试在 cellForRowAtIndexPath 中破解它,但这很丑陋
有任何想法吗 ?
我试图定义 didView* 方法,但它们都没有被调用,可能是因为视图位于弹出框内
谢谢
在显示弹出框之前,调用[table reloadData]
. 这将强制表格计算大小。然后只需使用[table contentSize]
.
另请注意,您可以自己计算表格的大小。如果您知道行/页眉/页脚的数据和高度,那么乘法和加法就是一个简单的问题。
I found this code somewhere on the Internet, I'm not sure where or I would give credit. It works perfectly, though (this is in a UITableViewController subclass). It sets the width of the controller to be a tad wider than the widest line displayed in the table (which, in my case leaves room for a disclosure indicator).
self = [super initWithStyle:style];
if (self)
{
sortOrders = @[@"Alphabetic",@"User-assigned",@"Randomized"];
selectedSortOrder = @"Alphabetic";
//
// compute the size of the popover based on maximum width and required height to accommodate all rows
//
int rowHeight = [self.tableView.delegate tableView:self.tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
int totalRowHeight = [sortOrders count] * rowHeight;
CGFloat maxWidth = 0.0f;
for (NSString *s in sortOrders)
{
CGSize labelSize = [s sizeWithFont:[UIFont systemFontOfSize:14.0f]];
if (labelSize.width > maxWidth)
maxWidth = labelSize.width;
}
self.contentSizeForViewInPopover = CGSizeMake(maxWidth+50.0f, totalRowHeight);
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
}
return self;
}