2014-07-12 75 views
0

我想在我的NavigationItemtitleView中添加標籤和圖像。我將UILabelUIImageView添加到UIView並將其設置爲導航項目的titleView。事情正在增加,但我無法計算標籤的長度和旁邊的圖像。 我的代碼是: -iOS Calc X將元素放置在視圖上的位置

// Title Name + Image 
UIView *titView = [[UIView alloc] initWithFrame:self.navigationItem.titleView.bounds]; 
self.navigationItem.titleView = titView; 

UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(-10, -20, 150, 30)]; 
title.text = @"Bunny "; 
[title setTextColor:[UIColor orangeColor]]; 
[titView addSubview:title]; 

float x2 = 30;  //+ title.bounds.size.width; 
UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"return" ]]; 
img.frame = CGRectMake(x2, -20, img.bounds.size.width, 30); 

[titView addSubview:img]; 

我正在尋找一些方法來calc下寬度文本,並相應設置標籤的寬度。現在我已將標籤的寬度設置爲150.其次,計算x位置以將圖像放置在標籤旁邊。

嘗試了很多方法,但沒有按預期工作。我怎樣才能做到這一點?你可以給他一些指導:無論標籤長度如何,事情都能按預期工作,並且UIView被放置在導航項目的中心。

任何幫助,高度讚賞。謝謝。

+0

您應該使用佈局約束來做到這一點,並在圖像視圖和標籤之間設置水平間距約束。您不需要設置標籤的寬度,它會根據字符串自行調整大小。 – rdelmar

回答

1

您可以設置其屬性後調用

[title sizeToFit]; 

,它將本身的大小,以包含的字符串相匹配。

設置imageViews X原點

CGRectGetMaxX(title.frame) + desiredSpacing; 

它可以幫助繼承UIView通過覆蓋layoutSubviews,並把你的意見有沒有達到最後的結果,因爲titleview的的框架可以通過的導航欄任意調節。 。基本上是這樣的:

@implementation TitleView{ 
    UILabel *_titleLabel; 
    UIImageView *_img; 
} 

- (id)initWithTitle:(NSString *)title andImage:(UIImage *)image 
{ 
    self = [super init]; 
    if (self) { 

     _titleLabel = [[UILabel alloc] init]; 
     _titleLabel.text = title; 
     [_titleLabel setTextColor:[UIColor orangeColor]]; 
     [_titleLabel sizeToFit]; 
     [self addSubview:_titleLabel]; 

     _img = [[UIImageView alloc] initWithImage:image]; 
     [self addSubview:_img]; 
    }  
    return self; 
} 

- (void)layoutSubviews{ 
    CGFloat spacingBetweenTextAndImage = 0; 
    CGFloat width = CGRectGetWidth(_titleLabel.frame)+CGRectGetWidth(_img.frame)+spacingBetweenTextAndImage; 

    CGFloat x = (CGRectGetWidth(self.bounds)-width)/2; 
    _titleLabel.frame = CGRectMake(x, (CGRectGetHeight(self.bounds)-CGRectGetHeight(_titleLabel.bounds))/2, CGRectGetWidth(_titleLabel.bounds), CGRectGetHeight(_titleLabel.bounds)); 

    x+=CGRectGetWidth(_titleLabel.bounds)+spacingBetweenTextAndImage; 

    _img.frame = CGRectMake(x, (CGRectGetHeight(self.bounds)-CGRectGetHeight(_img.bounds))/2, CGRectGetWidth(_img.bounds), CGRectGetHeight(_img.bounds)); 
} 
@end 

在你的viewController使用:

UIView *titleView = [[TitleView alloc] initWithTitle:@"Bunny" andImage:[UIImage imageNamed:@"return" ]]; 
self.navigationItem.titleView = titleView; 
+0

謝謝,這個伎倆。 – Tvd

相關問題