gpt4 book ai didi

ios - 以编程方式添加 UINavigationBar 和状态栏

转载 作者:行者123 更新时间:2023-12-01 22:19:32 24 4
gpt4 key购买 nike

我正在以编程方式创建一个 UINavigationBar,我希望它在状态栏下扩展。这是代码:

_baseView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];[_baseView setBackgroundColor:[UIColor redColor]];
self.view = _baseView;

_navigationBar = [[UINavigationBar alloc] init];

[_navigationBar setBarTintColor:[UIColor greenColor]];
[_navigationBar setBackgroundColor:[UIColor purpleColor]];

UINavigationItem* navigationItem = [[UINavigationItem alloc] initWithTitle:@"Title!"];
[_navigationBar setTitleTextAttributes:self.navigationController.navigationBar.titleTextAttributes];
[_navigationBar pushNavigationItem:navigationItem animated:NO];

[_navigationBar setTranslatesAutoresizingMaskIntoConstraints:NO];

[self.view addSubview:_navigationBar];

[_navigationBar.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor].active = YES;
[_navigationBar.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor].active = YES;
[_navigationBar.topAnchor constraintEqualToAnchor:self.view.topAnchor].active = YES;
[_navigationBar.heightAnchor constraintEqualToConstant:64].active = YES;
不幸的是,输出并不完全正确。正如您在下图中看到的,整个 UINavigationBar 的大小是正确的,紫色,但标题和其余部分的大小不同。
我在这里想念什么?
enter image description here

最佳答案

正如 azamsharp 指出的那样,一种可能的解决方案是嵌入 UINavigationController 中。

另一种方法如下。

使您的 ViewController 成为 UINavigationBarDelegate,在创建 UINavigationBar 时将 self 设置为委托(delegate),然后实现 - (UIBarPosition)positionForBar:

样本:

- (void)viewDidLoad {
[super viewDidLoad];

_baseView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
[_baseView setBackgroundColor:[UIColor redColor]];
self.view = _baseView;

_navigationBar = [[UINavigationBar alloc] init];

[_navigationBar setBarTintColor:[UIColor greenColor]];
[_navigationBar setBackgroundColor:[UIColor purpleColor]];

[_navigationBar setDelegate:self];

UINavigationItem* navigationItem = [[UINavigationItem alloc] initWithTitle:@"Title!"];
[_navigationBar setTitleTextAttributes:self.navigationController.navigationBar.titleTextAttributes];
[_navigationBar pushNavigationItem:navigationItem animated:NO];

[_navigationBar setTranslatesAutoresizingMaskIntoConstraints:NO];

[self.view addSubview:_navigationBar];

[_navigationBar.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor].active = YES;
[_navigationBar.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor].active = YES;
if (@available(iOS 11.0, *)) {
[_navigationBar.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor].active = YES;
} else {
[_navigationBar.topAnchor constraintEqualToAnchor:self.topLayoutGuide.bottomAnchor].active = YES;
}
}

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar {
return UIBarPositionTopAttached;
}

关于ios - 以编程方式添加 UINavigationBar 和状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46479212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com