iOS中navigationItem的titleView如何居中
Posted 小敏的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS中navigationItem的titleView如何居中相关的知识,希望对你有一定的参考价值。
开发过程中,发现titleview很难居中,通过各种尝试终于找到了解决方法。
首先清楚你个概念:
-
leftBarButtonItem,导航条中左侧button。
-
rightBarButtonItem,导航条中右侧button。
-
titleview,不用介绍了吧,就是标题。
问题原因:
经过尝试,发现titleview的起点位置和尺寸依赖于leftBarButtonItem和rightBarButtonItem的位置。
解决方案:
设置titleview之前,先初始化leftBarButtonItem和rightBarButtonItem的位置,然后根据leftBarButtonItem和rightBarButtonItem的位置来使titleview居中。
//以下使参考代码。 //必须放在 leftBarButtonItem和rightBarButtonItem初始化之后调用 - (void)setDisplayCustomTitleText:(NSString*)text { // Init views with rects with height and y pos UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; // Use autoresizing to restrict the bounds to the area that the titleview allows titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; titleView.autoresizesSubviews = YES; titleView.backgroundColor = [UIColorclearColor]; UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; titleLabel.tag = kUIVIEWCONTROLLER_LABEL_TAG; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:16]; titleLabel.textAlignment = UITextAlignmentCenter; titleLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; titleLabel.textColor = TC_CNavigationTitleColor; titleLabel.lineBreakMode = UILineBreakModeClip; titleLabel.textAlignment = UITextAlignmentCenter; titleLabel.autoresizingMask = titleView.autoresizingMask; CGRect leftViewbounds = self.navigationItem.leftBarButtonItem.customView.bounds; CGRect rightViewbounds = self.navigationItem.rightBarButtonItem.customView.bounds; CGRect frame; CGFloat maxWidth = leftViewbounds.size.width > rightViewbounds.size.width ? leftViewbounds.size.width : rightViewbounds.size.width; maxWidth += 15;//leftview 左右都有间隙,左边是5像素,右边是8像素,加2个像素的阀值 5 + 8 + 2 frame = titleLabel.frame; frame.size.width = 320 - maxWidth * 2; titleLabel.frame = frame; frame = titleView.frame; frame.size.width = 320 - maxWidth * 2; titleView.frame = frame; // Set the text titleLabel.text = text; // Add as the nav bar‘s titleview [titleView addSubview:titleLabel]; self.navigationItem.titleView = titleView; }
以上是关于iOS中navigationItem的titleView如何居中的主要内容,如果未能解决你的问题,请参考以下文章
iOS中navigationItem的titleView如何居中
NavigationItem iOS 11 Apple 方式中的 UISearchController
iOS11 SearchController - 从 navigationItem 中移除 SearchBar 会留下损坏的 UI
swift语言IOS8开发战记18 NavigationItem