标签:
开发过程中,发现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如何居中
标签:
原文地址:http://www.cnblogs.com/fengmin/p/5541366.html