1

UITableController を含む UIPopOverController があります。すべての要素を初期化し、popOver を表示したいのですが、現時点では UITable はそのサイズを認識していないため、UIpopOver のサイズを設定できません。

また、UITable がそのサイズを認識した後、どこで UIPopOver のサイズを設定できるかわかりません (cellForRowAtIndexPath 内でハックしてみることができますが、これは可能な限り醜いです)

何か案は ?

didView* メソッドを定義しようとしましたが、おそらくビューがポップオーバー内にあるため、どれも呼び出されません

ありがとう

4

2 に答える 2

2

ポップオーバーを表示する前に、 を呼び出します[table reloadData]。これにより、テーブルでサイズが計算されます。次に、を使用します[table contentSize]

また、テーブルのサイズは自分で計算できることに注意してください。データと行/ヘッダー/フッターの高さがわかっている場合は、乗算と加算の簡単な問題です。

于 2013-08-13T19:56:01.010 に答える
0

私はこのコードをインターネットのどこかで見つけました。ただし、これは完全に機能します (これは UITableViewController サブクラスにあります)。コントローラーの幅を、表に表示されている最も広い線よりも少し広く設定します (私の場合、開示インジケーターの余地があります)。

 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 に答える