我想向导航栏添加分段控件,但同时保留标题和按钮,就像在 iOS 7 Appstore 购买部分 ( example )
我试过添加分段控件作为标题 View ,然后使用提示作为标题,但按钮与分段控件处于同一级别。
最佳答案
我找到了两个解决方案:
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;
}
}
关于ios - 将分段控件添加到导航栏并使用按钮保留标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18813563/