我找到了两个解决方案:
1)根据neural5torm的建议,可以将分段控件添加到与导航栏背景颜色相同的UIView中
你可以这样去掉 UINavigationBar 的细线:
for (UIView *view in self.navigationController.navigationBar.subviews)
{
for (UIView *view2 in view.subviews)
{
if ([view2 isKindOfClass:[UIImageView class]])
{
[view2 removeFromSuperview];
}
}
}
这对于不透明导航栏是可以的。
如果您想要一个半透明导航栏:
2) 子类 UINavigationBar 通过覆盖 sizeThatFits 来创建更高的栏
- (CGSize)sizeThatFits:(CGSize)size
{
size.width = self.frame.size.width;
size.height = your height (probably 88.0f);
return size;
}
要使用您的自定义导航栏:
UINavigationController *navController = [[UINavigationController alloc] initWithNavigationBarClass:[YouNavigationBar class] toolbarClass:nil];
[navController setViewControllers:@[viewController]];
标题和按钮项目将位于底部。调整它们的垂直位置(在自定义导航栏的初始化中或通过外观代理)
// Title view
[self setTitleVerticalPositionAdjustment:-dy forBarMetrics:UIBarMetricsDefault];
// Button item as icon/image
[[UIBarButtonItem appearanceWhenContainedIn:[YourCustomNavigationBar class], nil] setBackgroundVerticalPositionAdjustment:-dy forBarMetrics:UIBarMetricsDefault];
看UIBarButtonItem类参考,还有setTitlePositionAdjustment等返回按钮的方法
创建分段控件时,将其添加到导航栏
[self.navigationController.navigationBar addSubview:segmentedControl];
分段控件将位于顶部。通过覆盖自定义导航栏中的didAddSubview 来调整其垂直位置
- (void)didAddSubview:(UIView *)subview
{
[super didAddSubview:subview];
if ([subview isKindOfClass:[UISegmentedControl class]])
{
CGRect frame = subview.frame;
frame.origin.y += your extra height (probably 44.0f);
subview.frame = frame;
}
}