0

2 つの UILabel、2 つの UITableView、および UITextView を含むビューがあります。表示内容に基づいて 2 つのテーブルをレイアウトしようとしています。最初のテーブルの寸法は問題なく作成できますが、実際のコンテンツに基づいてテーブルの高さを再設定すると、テーブルがビューに表示されなくなります。以下のコード スニペット:

-(void)viewDidLoad
{
// code to set up the first two UILabels (one of which is clinic name)
...

//
// Create the address table
//
CGRect addrRect = self.view.bounds ;
CGFloat addrStart = clinicNameRect.origin.y + (clinicNameRect.size.height)*1.5 ;
addrRect.origin.y =  addrStart;
addrRect.size.height -= addrStart ; // setting it to size of rest of view which is not what I want

addressList = [[UITableView alloc] initWithFrame:addrRect style:UITableViewStyleGrouped] ;
[addressList setDataSource:self] ;
[addressList setDelegate:self] ;

[addressList setAutoresizingMask:UIViewAutoresizingFlexibleHeight |  
                                 UIViewAutoresizingFlexibleWidth] ;
[addressList setBackgroundColor:clr] ;
[addressList setBackgroundView:nil] ; // no background

[[self view] addSubview:addressList] ; // tried moving this to after with same result

// have the system layout the table, then reset the height to actual size
[addressList layoutIfNeeded];

CGRect newFrame = [addressList frame] ;
newFrame.size.height = [addressList contentSize].height ;

// make the table's frame exactly match its size
[addressList setFrame:newFrame] ;

// go to set up next UITableView...

setFrame への呼び出しを取り出すと、テーブルは問題なく表示されます (ただし、ビューのスペースが多すぎます)。その電話をそのままにしておくと、テーブルがまったく表示されません。

4

1 に答える 1

0

[UIView bounds]との違いについては、ドキュメントを参照してください[UIView frame]

原点の変更はbounds特定の状況で可能な場合がありますが、本当に必要なのはframe.

また、frameとはどちらboundsもアニメート可能なプロパティです。新しい値を設定するとアニメーションが開始され、その値にアクセスする場合、現在の値を取得する必要はありません。

于 2013-04-11T19:40:23.363 に答える