如何获得UINavigationBar中后退按钮的宽度?

时间:2011-09-20 11:39:23

标签: iphone objective-c uinavigationcontroller uinavigationbar uinavigationitem

我们有一个可能会从多个位置推送的控制器,因此其后退按钮可能具有多个标题之一。它还有一个弹出另一个控制器的按钮。它们都具有相同的自定义标题元素,但它们的中心位置不同,因为第二个控制器没有后退按钮。我想添加一个垫片来解决这个问题,但我不知道它的宽度。如何获取UINavigationBar中后退按钮的宽度?

2 个答案:

答案 0 :(得分:5)

您可以随时浏览导航栏的子视图,查找后退按钮视图并在找到它时拾取大小。我在博客上发布了一段时间,回顾了UIView的子视图,这里是URL:

http://www.dosomethinghere.com/2011/07/09/logging-the-view-hierarchy/

我在当前应用程序中使用上述URL中描述的InspectView类,当我将此代码插入到导航栏中有后退按钮的视图控制器中时:

- (void)viewDidAppear:(BOOL)animated
{
    [InspectView dumpViewToLog:self.navigationController.navigationBar findParent:NO];
}

这是控制台中的结果输出:

2011-09-20 09:11:19.599 MyApp[2070:207] 
Inspect view hierarchy -----------------------------------
UINavigationBar (0x6626460): frame origin: (0, 20) size: (320, 44) [tag=0] UIView : UIResponder : NSObject : 
.   UILabel (0x6613f00): frame origin: (62, 0) size: (200, 44) [tag=0] UIView : UIResponder : NSObject : 
.   .   UILabel (0x6628520): frame origin: (0, 19) size: (200, 20) [tag=0] UIView : UIResponder : NSObject : 
.   .   UILabel (0x665eda0): frame origin: (0, -1) size: (200, 24) [tag=0] UIView : UIResponder : NSObject : 
.   UINavigationItemButtonView (0x662a5b0): frame origin: (5, 7) size: (49, 30) [tag=0] UINavigationItemView : UIView : UIResponder : NSObject : 
End of view hierarchy -----------------------------------

UINavigationItemButtonView是后退按钮,您可以看到大小为49宽30高。您可以在应用中查找此视图类并记住大小。

请注意,将此代码放入viewDidLoad或viewWillAppear会显示不同的结果。

答案 1 :(得分:-1)

试试这种方式

  NSLog(@"frame =%f",self.navigationController.navigationItem.rightBarButtonItem.width);