1

我有一个 UIPopOverController,里面有一个 UITableController。我初始化所有元素,想呈现popOver,此时UITable不知道它的大小,所以我无法设置UIpopOver的大小

我也不确定在 UITable 知道它的大小之后我还能在哪里设置 UIPopOver 的大小(我可以尝试在 cellForRowAtIndexPath 中破解它,但这很丑陋

有任何想法吗 ?

我试图定义 didView* 方法,但它们都没有被调用,可能是因为视图位于弹出框内

谢谢

4

2 回答 2

2

在显示弹出框之前,调用[table reloadData]. 这将强制表格计算大小。然后只需使用[table contentSize].

另请注意,您可以自己计算表格的大小。如果您知道行/页眉/页脚的数据和高度,那么乘法和加法就是一个简单的问题。

于 2013-08-13T19:56:01.010 回答
0

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;
}
于 2013-08-13T20:00:52.220 回答