3

UIBarItem/NSObject から継承した UIBarButtonItem のフレームを取得しようとしています。

4

4 に答える 4

6

この方法は私に最適です:

UIView *targetView = (UIView *)[yourBarButton performSelector:@selector(view)];
CGRect rect = targetView.frame;
于 2013-08-20T21:00:07.337 に答える
6

iOS 5.0、5.1、および 6.0 では、次の方法を使用します。このメソッドは、UIToolBar でも使用できるように簡単に変更できます。

- (UIControl *) findBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    UINavigationBar *toolbar = self.navigationController.navigationBar;
    UIControl *button = nil;
    for (UIView *subview in toolbar.subviews) {
        if ([subview isKindOfClass:[UIControl class]]) {
            for (id target in [(UIControl *)subview allTargets]) {
                if (target == barButtonItem) {
                    button = (UIControl *)subview;
                    break;
                }
            }
            if (button != nil) break;
        }
    }

    return button;
}

使用法:

UIControl *barButton = [self findBarButtonItem:myBarButtonItem];
CGRect barButtonFrame = barButton.frame;
于 2013-01-04T18:52:16.303 に答える
5

あなたが見つけた答えを投稿する目的でこの質問を投稿したことは知っています。将来の iOS アップデートで問題が発生するリスクのない代替ソリューションを追加すると考えました。

カスタム ビューを使用して を作成すると、 のプロパティにUIBarButtonItemアクセスできます。のは、ツールバーまたはナビゲーション バーでの位置を反映します。customViewUIBarButtonItemframecustomView

明らかに、このソリューションでは、標準のシステム定義ボタンを使用できません。ただし、独自のイメージで簡単に複製できます。

通常、使用するカスタム ビューはUIButton、適切なアイコン イメージを持つものです。1 つの秘訣は、ボタンのshowsTouchWhenHighlightedプロパティを有効にして、通常のハイライト効果が得られるようにすることです。

UIButtonで使用するのと同じターゲット/アクションで をセットアップしますUIBarButtonItem

于 2013-01-04T19:04:18.237 に答える