ios中navigationItem的titleView如何居中


開發過程中,發現titleview很難居中,通過各種嘗試終於找到了解決方法。

首先清楚你個概念:

1.leftBarButtonItem,導航條中左側button。

2.rightBarButtonItem,導航條中右側button。

3.titleview,不用介紹了吧,就是標題。

問題原因:

經過嘗試,發現titleview的起點位置和尺寸依賴於leftBarButtonItem和rightBarButtonItem的位置。

解決方案:

設置titleview之前,先初始化leftBarButtonItem和rightBarButtonItem的位置,然后根據leftBarButtonItem和rightBarButtonItem的位置來使titleview居中。

 

 

//以下使參考代碼。

//必須放在 leftBarButtonItemrightBarButtonItem初始化之后調用

- (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;

    [titleView release];

    [titleLabel release];

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM