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