2

いくつかの動的要素 (正確にはさまざまなサイズの UILabels) を含む tableViewHeader UIView があります。IB で UIView を設定し、すべてを接続し、sizeToFit の後にラベルのサイズに基づいてフレームの原点を変更しようとしています。

setFrame 呼び出しの後に新しいフレームをログに記録すると、実際には更新されたオリジンが表示されますが、シミュレーターには表示されません。ラベルの高さは変わりますが、原点は変わりません。

- (void)viewDidLoad
{
[super viewDidLoad];
CGRect frame;
CGFloat baseOffset = titleLbl.frame.origin.y;
offset = titleLbl.frame.size.height;
self.titleLbl.text = destObject.title;
self.titleLbl.font = [UIFont fontWithName:@"Avenir-Heavy" size:22];
[self.titleLbl sizeToFit];
frame = titleLbl.frame;
frame.origin.y = baseOffset;
//Get any change in size from the label
offset = titleLbl.frame.size.height - offset;

frame = imageView.frame;
frame.origin.y = frame.origin.y + offset;
self.imageView.frame = frame;

frame = photosBtn.frame;
frame.origin.y = frame.origin.y + offset;
[self.photosBtn setFrame:frame];

frame = detailLbl.frame;
frame.origin.y = frame.origin.y + offset;
self.detailLbl.frame = frame;
baseOffset = self.detailLbl.frame.origin.y;
CGFloat detailOffset = self.detailLbl.frame.size.height;
self.detailLbl.text = destObject.description;
[self.detailLbl sizeToFit];
frame = detailLbl.frame;
frame.origin.y = baseOffset;
self.detailLbl.frame = frame;
detailOffset = self.detailLbl.frame.size.height - detailOffset;
offset = offset + detailOffset;

frame = blueLine.frame;
frame.origin.y = frame.origin.y + offset;
self.blueLine.frame = frame;

self.whereToDiveLbl.font = [UIFont fontWithName:@"Avenir-Heavy" size:22];
frame = whereToDiveLbl.frame;
frame.origin.y = frame.origin.y + offset;
self.whereToDiveLbl.frame = frame;

frame = grayLine.frame;
frame.origin.y = frame.origin.y + offset;
self.grayLine.frame = frame;

frame = CGRectMake(headerView.frame.origin.x, headerView.frame.origin.y, headerView.frame.size.width, grayLine.frame.size.height + grayLine.frame.origin.y + 5);
self.headerView.frame = frame;
}

同様の問題を探してみましたが、見つかりませんでした。誰でもこれに光を当てることができますか?

UIView 自体 (つまり、この場合は headerView) はシミュレーターのフレームに変更を反映しますが、サブビューは反映しません。違いがある場合はサブビューの自動サイズ変更を有効にしていますが、同じ結果が有効または無効になります。

4

1 に答える 1

7

IB の UIView の Identity と Type で [Use Autolayout] がチェックされていることがわかりました...これを選択解除すると問題が解決しました。

于 2012-09-26T14:31:08.290 に答える