2012-02-11 21 views
0

私はプログラムでUINegigationControllerのツールバーにUISegmentedControlを追加しています(私はUITableViewControllerにあります)。私はセグメント化されたコントロールをまともに見えるようにし、バー全体を埋めるのではない。また、ビューを回転してサイズを変更する必要があります。これはかなり簡単なはずですが、私は何かが欠けていると思います。私は実際に動作するようにしましたが、これはクリーンなコードではないので、誰かが "適切な"実装に使う設定やメソッドを教えてくれることを願っています。UINavigationController内のUISegmentedControl UIToolbarが正しくサイズ変更されない

ゲッター:

我々はそれを挿入
- (UISegmentedControl*)stockFilterSegmentedControl { 
if (!_stockFilterSegmentedControl) { 
    _stockFilterSegmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"All",@"Holdings", nil]]; 
    [_stockFilterSegmentedControl addTarget:self action:@selector(stockFilterControlPressed:) forControlEvents:UIControlEventValueChanged]; 
    _stockFilterSegmentedControl.selectedSegmentIndex = 0; 
    _stockFilterSegmentedControl.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
    CGRect newFrame = _stockFilterSegmentedControl.frame; 
    newFrame.size.height = self.navigationController.toolbar.frame.size.height * .8; 
    _stockFilterSegmentedControl.frame = newFrame; 
} 

return _stockFilterSegmentedControl; 
} 

- (NSArray*)navFooterToolbarArray { 
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.stockFilterSegmentedControl]; 
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
UIBarButtonItem *refresh = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh:)]; 
return [NSArray arrayWithObjects:flexibleSpace, barButtonItem, flexibleSpace, refresh, nil];  
} 

- (void)viewDidLoad { 
[super viewDidLoad]; 
self.title = @"Stocks"; 
self.toolbarItems = [self navFooterToolbarArray]; 
} 

そして、それは私が追加する必要がありました動作させるために:

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
NSLog(@"Did autorotate."); 
CGRect newFrame = self.stockFilterSegmentedControl.frame; 
newFrame.size.height = self.navigationController.toolbar.frame.size.height * .8; 
self.stockFilterSegmentedControl.frame = newFrame; 
} 

これを行うための正しい方法は何ですか?

おかげで、

ダミアン

答えて

2

答えは実際にはとても簡単です。セグメント化されたコントロールのsegmentedControlStyleをUISegmentedControlStyleBarに設定すると、ドラマなしで完全にサイズが変更されます。自動サイズ変更マスクは期待通りに機能します。

おかげで、

ダミアン

+0

iOS 7以降はもう動作しません。 iOS 7以上の他のソリューションはありますか? – Vinh

+0

確認、iOS7では動作しません – malex

1

は、あなたが本当に必要とする必要があるすべてのようなものです:あなたは、ビューが回転したときに何もする必要はありません

_stockFilterSegmentedControl.frame = CGRectInset(self.navigationController.toolbar.bounds, 5, 5); //set to toolbar rect inset by 5 pixels 
_stockFilterSegmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

、それだけで自動的にリサイズする必要があります自動調整マスクのために適合させる。

+0

は、自動サイズ変更マスクは、コンテナビュー(この場合は、ツールバー)に対するフレームを調整することである、私が期待する何をしません。しかたがない。私のコードは動作しますが、回転するたびにフレームを設定するより良い方法があることを望みました。 +1はCGRectInsetを指摘するために+1しました。ここでは、高さを調整し、回転時でも幅を変えないことを好みます。ありがとう! –