我将 UINavigationBar 子类化为在我的应用程序中有一个自定义导航栏。该栏在多个视图控制器上重复使用,其菜单按钮与左按钮项具有相同的样式,这就是它被子类化的原因。
然后将子类添加到情节提要中的 View Controllers 导航栏中。
这是UINavigationBar
子类中的代码:
- (void)drawRect:(CGRect)rect
{
// Drawing code
UIImage *image = [[UIImage imageNamed: @"mainNavBar"] resizableImageWithCapInsets:UIEdgeInsetsMake(0,5,0,5)];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
-(void)awakeFromNib {
UIButton *leftButton = [[UIButton alloc]initWithFrame:CGRectMake(7.0f, 7.0f, 38.0f, 29.0f)];
[leftButton setImage:[UIImage imageNamed:@"menuBarItem"] forState:UIControlStateNormal];
[leftButton addTarget:nil action:@selector(menuItemPressed:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:leftButton];
}
问题是Rotation of the Device。我还有一些appDidFinishLaunching
使用外观 API 进行附加设置的代码:
// Custom Navigation Bar appearance setup
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor,
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5],UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
UITextAttributeTextShadowOffset,nil]];
// Used to deal with the rotation of the nav bar when implemented outside of Navigation Controller
[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleHeight];
[[UINavigationBar appearance] setContentMode:UIViewContentModeScaleAspectFit];
// Used to push the title down slightly when in Landscape and NavBar outside of Navigation Controller
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:2 forBarMetrics:UIBarMetricsLandscapePhone];
当设备旋转时,就如预期的从 44 到 32 像素的条形高度缩放而言,它一切正常。但是,按钮仍然出现在栏的外侧。
我已经查看了其他一些关于此的 SO 帖子,但无法弄清楚如何正确完成此操作:iPhone: UINavigationBar with button - 调整高度
理想情况下,我不想处理视图控制器中的自动旋转,因为这个 UINavigationBar 通过大量 VC 重复使用。添加自动轮换代码是否意味着每个 VC 也可能需要这个?
编辑 - 以下答案如果我将其更改awakeFromNib
为包括以下内容:
UINavigationItem* ni = [[UINavigationItem alloc] initWithTitle:@"Test"];
UIImage *menuBgImage = [UIImage imageNamed:@"menuBarItem"];
UIBarButtonItem *b =[[UIBarButtonItem alloc] initWithImage:menuBgImage landscapeImagePhone:menuBgImage style:UIBarButtonItemStylePlain target:nil action:@selector(menuItemPressed:)];
ni.leftBarButtonItem = b;
self.items = @[ni];
我有 UIBarButtonItemStylePlain 破坏图像的问题:
如果我使用 initWithCustomView 完成之前的设置并使用原始代码中的 leftButton。使用 leftButton 使用 autoresize 来调整高度-然后我会在横向中得到一个严重拉伸的图像?
编辑 2 - 每个答案的附加图像