iOS中navigationItem的titleView如何居中

来源:互联网 发布:ubuntu apt 安装jdk8 编辑:程序博客网 时间:2024/05/21 10:14

iOS中navigationItem的titleView如何居中


开发过程中,发现titleview很难居中,通过各种尝试终于找到了解决方法。

首先清楚你个概念:

  1. leftBarButtonItem,导航条中左侧button。
  2. rightBarButtonItem,导航条中右侧button。
  3. 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;


}

0 0
原创粉丝点击