2017-03-27 4 views
2

私は一番上に検索バーとビューの残りの部分を埋めるテーブルビューを持つビューコントローラを作っています。1つのサブビューのサイズを変更した後、自動レイアウトをトリガする方法はありますか?

enter image description here

今、私が設定できるように検索バーの可視性を必要とします。私がしていることは次のようなものです:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    if (!(self.bShowSearchBar)) { 
     [self.searchBar setHidden:YES]; 
     CGRect frameSearchBar = self.searchBar.frame; 
     frameSearchBar.size.height = 0; 
     [self.searchBar setFrame:frameSearchBar]; 
     NSLog(@"self.searchBar.frame: %@", NSStringFromCGRect(self.searchBar.frame)); 
     NSLog(@"self.tableView.frame: %@", NSStringFromCGRect(self.tableView.frame)); 
    } 
} 

検索バーを隠すとテーブルビューの位置が正しく調整されません。 NSLogは、テーブルビューのフレームを調整することを拒否しながら、検索バーの枠がすでに変更されて示しています

2017-03-27 15:37:41.204413 App[2071:954793] self.searchBar.frame: {{0, 0}, {375, 0}} 
2017-03-27 15:37:41.204675 App[2071:954793] self.tableView.frame: {{0, 44}, {375, 623}} 

をそれだけで正しく表示されません。検索バーの場所はまだ保持されています。

enter image description here

また、私は0に検索バーの高さを設定した直後

(1) [self.tableView setNeedsLayout]; 
    [self.tableView layoutIfNeeded]; 

(2) [self.view layoutSubviews]; 

てみましたが、それらのどれも機能しません。

したがって、1つのサブビューのサイズを変更した後、自動レイアウトを再起動するにはどうすればよいですか?前もって感謝します。

+3

自動レイアウトを使用している場合は、フレームを変更しないでください。制約を変更する – Paulw11

答えて

2

Autolayoutでビューのフレームを変更することはできません。自動レイアウトオプションを開いても機能しません。代わりに制約を変更する必要があります。

あなたの写真から

、制御上の enter image description here

プレスおよびプロパティとしてそれを作るために、あなたの.mファイルにこの制約をドラッグします。

変更を加えたい場合は、このプロパティを変更してください。検索バーの高さが44に等しいので、

その後、-44 screen.Byの上にこの変更を44pointを意味し、あなたが検索バーの上部は-44に等しく設定することができ、viewDidLoadで、あなたのケースを参照してください、テーブルビューにもなりますあなたの検索バーを隠し、テーブルビューのフレームを右にしてください。

+0

ああ、うまくいく!素晴らしい解決策! – kuang

0

ヘンソンのおかげで、との他の便宜のために、解決策はこのようになります:

は、(1)にInterface Builderから「検索Bar.top =トップ」を削除します。

(2)のviewDidLoad、

if (self.bShowSearchBar) { 
    [self.searchBar setHidden:NO]; 
    NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:self.searchBar attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]; 
    [self.view addConstraint:topConstraint]; 
} 
else { 
    [self.searchBar setHidden:YES]; 
    NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:self.searchBar attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:-44.0]; 
    [self.view addConstraint:topConstraint]; 
} 
[self.view updateConstraints]; 

ではそれは完璧に働いています!

関連する問題