0

UINavigationItema のタイトルが切り詰められているかどうかを確認したい。

タイトルを次のように設定しました: self.navigationItem.title = whatever.

a のテキストが次の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 であり、タイトルよりもはるかに小さいためです。 .

だから、私の質問はこれに帰着します: に表示されるタイトルの幅を見つけるにはどうすればよいUINavigationItemですか?

更新:問題の解決策を見つけました、理想的、完璧、または信頼できるものではないため、まだ回答としてマークしていません。誰かがより良い解決策を持っている場合は、それらを共有してください。

4

2 に答える 2

2

私が試してみるのは、をにキャストUINavigationItemViewし、プロパティをUILabel使用してそのテキストを取得し、を使用して文字列のを取得することです。.textCGSize-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];
        }
}

.widthこれで、のプロパティを使用しtheSizeてテキストの幅を確認できます。

注:これは理論的にはテストされていません。私はそれがうまくいくことを願っています!あなたがそれをどのように理解するかを楽しみにしています。=)

于 2012-06-09T04:44:02.107 に答える
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はソフトウェアバージョン間でわずかに変更する場合があるため、これが常に正確であるとは限りません。

注:このソリューションは、戻るボタンと1つの右バーボタンを備えたポートレートモードのナビゲーションバーに対応しています。あなたのものが異なる場合は、これを手動で微調整する必要があります。

ご覧のとおり、これは完璧な解決策ではないので、誰かがより良い解決策を持っている場合は、それを共有してください。

于 2012-06-09T07:14:36.540 に答える