2012-06-09 89 views
0

我想檢查UINavigationItem的標題是否被截斷。檢查UINavigationItem標題是否被截斷

我設置了這樣的標題:self.navigationItem.title = whatever

我知道我可以檢查是否在UILabel文本被截斷這樣的:

CGSize size = [label.text sizeWithFont:[UIFont fontWithName:@"myfont" size:18.0]]; 
if (size.width > label.bounds.size.width) { 
    // set a shorter title 
} 

而且我甚至可以在其中找到,標題顯示,像這樣的UINavigationItemView對象:

UIView *navItemView; 
for (UIView *view in self.navigationController.navigationBar.subviews) { 
    if ([view isKindOfClass:NSClassFromString(@"UINavigationItemView")]) { 
     navItemView = view; 
    } 
} 

但是我不能將這種方法應用到navItemView,因爲它的寬度似乎總是正好爲58,這比標題中的標題要小得多,所以根據這一點,標題會被截斷,即使它不是「T。

所以,我的問題歸結爲:我如何找到在UINavigationItem顯示標題的寬度?

更新:找到了解決我的問題,但它是不完全理想的,完美的,或可靠的,所以我不會將其標記爲答案。如果有人有更好的解決方案,請分享。

回答

1

終於找到了解決方案:

self.navigationItem.title = title; 

CGFloat titleWidth = 320 - (5.0 + self.navigationItem.backBarButtonItem.width + 10.0 + 10.0 + self.navigationItem.rightBarButtonItem.width + 5.0); 
if ([self.navigationItem.title sizeWithFont:[UIFont fontWithName:@"myfont" size:18.0]].width > titleWidth) { 
    self.navigationItem.title = aShorterTitle; 
} 

說明:titleWidth是空間遺留在導航欄的標題的量的人工計算。換句話說:

導航欄(320)的總寬度 - 的後退按鈕和屏幕的左側之間的間隙(尺寸(5)+後退按鈕+的後退按鈕和標題之間間隙尺寸的寬度(10 )+的標題和右側欄按鈕(10)+右欄按鈕+的右欄按鈕和屏幕的右側之間的間隙尺寸的寬度之間的間隙尺寸(5))

注:的間隙尺寸(5 & 10)是手動測量的,並且對像素精確,但Apple可能會在軟件版本之間稍微改變它們,所以這可能並不總是準確。

另請注意:此解決方案通過一個後退按鈕和一個右側酒吧按鈕來滿足縱向導航條的需求。如果你的不同,你將不得不手動調整。

正如你可以看到,這是不是一個完美的解決方案,因此,如果任何人有一個更好的,請分享。

2

我會嘗試是,投了UINavigationItemViewUILabel,獲得其與.text屬性中的文本,並與-sizeWithFont:constrainedToSize:

UILabel *navItemView; 
    for (UIView *view in self.navigationController.navigationBar.subviews) { 
     if ([view isKindOfClass:NSClassFromString(@"UINavigationItemView")]) { 
      navItemView = (UILabel*)view; 
      CGSize theSize = [navItemView.text sizeWithFont:[UIFont systemFontOfSize:navItemView.font.systemFontSize] constrainedToSize:260 lineBreakMode:UILineBreakModeWordWrap]; 
     } 
} 

得到的字符串CGSize現在你可以使用.width屬性theSize找出文本的寬度。

注意:這是從理論上講,並沒有測試。我希望它能起作用!期待你如何與它取得聯繫。 =)

+0

都能跟得上。 ''SIGABRT' - [UINavigationItemView文本]:無法識別的選擇發送到instance' 看起來它不是一個UILabel。 – Greg