テーブルビューを表示するためにスライドするサイドメニューがあり、そこからリビュービューコントローラーを使用するセグエがあります。セグエはView Controllerに直接接続する必要があります。 Navigation Controllerを使用できません。
Navigation Controllerなしでバーボタンアイテムを含むNavigation Barを追加するにはどうすればよいですか?
あなたの質問に答える賢い方法がいくつかありますが。プログラムで解決し、次のコードをviewWillAppear
に記述しました(注-viewDidLoad
も問題ありませんが、推奨されません)-
void)viewWillAppear:(BOOL)animated { UINavigationBar * myNav = [[UINavigationBar alloc] initWithFrame:CGRectMake(0、0、320、50)]; [UINavigationBarの外観] .barTintColor = [UIColor lightGrayColor]; [self.view addSubview:myNav]; UIBarButtonItem * cancelItem = [ [UIBarButtonItem alloc] initWithTitle:@ "Cancel" style:UIBarButtonItemStyleBordered target:self action:nil]; UIBarButtonItem * doneItem = [[UIBarButtonItem alloc] initWithTitle:@ "Done" style:UIBarButtonItemStyleBordered target:self action:nil]; UINavigati onItem * navigItem = [[UINavigationItem alloc] initWithTitle:@ "Navigation Title"]; navigItem.rightBarButtonItem = doneItem; navigItem.leftBarButtonItem = cancelItem; myNav.items = [ NSArray arrayWithObjects:navigItem、nil]; [UIBarButtonItem外観] .tintColor = [UIColor blueColor]; }
そのため、Navigation Controllerなしの青いバーボタンアイテムを備えた白いNavigation Barがあります。繰り返しますが、あなたのケースでそれを実装する他の方法があります。希望、これが役立った。
出力-
---(更新-
画像を追加するには-
UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,10,32,32)];
[myImage setImage:[UIImage imageNamed:@"image.png"]];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myImage];
[self.view addSubview:myImage];
これには、インターフェイスビルダーでNavigationItem
を使用する方法があります。
NavigationItem
を使用する場合と同様に、最初にViewController
をインターフェイスビルダーのNavigationController
に追加します。 シミュレートされたメトリックの下でNavigationBar
およびInferred
以外を選択して、None
が表示されるようにしてください。
次に、viewDidLoad
に次の行を追加します。
- (void)viewDidLoad
{
[super viewDidLoad];
UINavigationBar *bar = [[UINavigationBar alloc] initWithFrame: frame];
bar.items = @[self.navigationItem];
[self.view addSubview: bar];
}
frame
に関しては、width
はViewController
と同じになり、height
は44.0
または64.0
status bar
は可視かどうかです。
CGFloat navigationBarHeight = 44.f + [UIApplication sharedApplication].statusBarFrame.size.height;
CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, navigationBarHeight);
異なる方向を使用する場合は、NSLayoutConstraints
を使用します。
CGFloat navigationBarHeight = 44.f + [UIApplication sharedApplication].statusBarFrame.size.height;
[self.view addConstraints: @[
[NSLayoutConstraint constraintWithItem: self.view
attribute: NSLayoutAttributeLeft
relatedBy: NSLayoutRelationEqual
toItem: bar
attribute: NSLayoutAttributeLeft
multiplier: 1.0
constant: 0.0],
[NSLayoutConstraint constraintWithItem: self.view
attribute: NSLayoutAttributeRight
relatedBy: NSLayoutRelationEqual
toItem: bar
attribute: NSLayoutAttributeRight
multiplier: 1.0
constant: 0.0],
[NSLayoutConstraint constraintWithItem: self.view
attribute: NSLayoutAttributeTop
relatedBy: NSLayoutRelationEqual
toItem: bar
attribute: NSLayoutAttributeTop
multiplier: 1.0
constant: 0.0],
[NSLayoutConstraint constraintWithItem: bar
attribute: NSLayoutAttributeHeight
relatedBy: NSLayoutRelationEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 1.0
constant: navigationBarHeight],
]];
Swift 4バージョン
let navigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: 320, height: 50))
navigationBar.barTintColor = UIColor.lightGray
view.addSubview(navigationBar)
let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: nil)
let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: nil)
let navigationItem = UINavigationItem(title: "Title")
navigationItem.leftBarButtonItem = cancelButton
navigationItem.rightBarButtonItem = doneButton
navigationBar.items = [navigationItem]
"viewWillAppear"の追加には非常に注意してください。このメソッドは何度も呼び出すことができるため(たとえば、モーダルが表示されます...)、レイジーアプローチを使用します。
1)変数を宣言します:
var myNav: UINavigationBar?
2)既に設定されている場合のテスト:
viewWillAppear:(BOOL)animated {
if self.myNav != nil{
return
}
self.myNav = ....
3)必ず既存のコントローラーを削除してください(didDisappearなど)。
note ..サイズを指定するのは正しくありません.. iOSが回転する場合、うまく動作しません。
"viewWillAppear"の追加には非常に注意してください。このメソッドは何度も呼び出すことができるため(たとえば、モーダルが表示されます...)、レイジーアプローチを使用します。
1)変数を宣言します:
var myNav: UINavigationBar?
2)既に設定されている場合のテスト:
viewWillAppear:(BOOL)animated {
if self.myNav != nil{
return
}
self.myNav = ....
3)必ず既存のコントローラーを削除してください(didDisappearなど)。