我正在尝试使用利用UINavigationBar的自定义子类的UINavigationController。但是,我遇到了initWithFrame问题。调用initWithFrame时,我会打印出尺寸,并显示0.0宽度和0.0高度。但是,当我在UINavigationBar子类内的-(void)layoutSubviews中打印出相同的框架时,框架已正确设置。为什么initWithFrame接收大小为零的帧,我该如何解决?手动调用initWithFrame或类似的命令听起来不正确,因为UINavigationController应该注意这一点。以下是相关代码:
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UINavigationController *navController = [[UINavigationController alloc] initWithNavigationBarClass:[CustomNavigationBar class] toolbarClass:nil];
CoolViewController *vc = [[CoolViewController alloc] init];
[navController pushViewController:vc animated:YES];
self.window.rootViewController = navController;
[self.window makeKeyAndVisible];
return YES;
}
CustomNavigationBar.m
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame])
{
NSLog(@"initWithFrame with frame: %f, %f", frame.size.width, frame.size.height); // This prints "initWithFrame with frame: 0, 0"
}
return self;
}
谢谢!
最佳答案
我相信导航控制器实际上并未将帧大小设置为指定值。而是向导航栏询问其sizeThatFits:
并使用它。根据定义,这无法完成并传递给initWithFrame:
。因此,您想使用sizeThatFits:
,setFrame:
和layoutSubviews
的组合来添加,调整和重置导航栏内容。
关于ios - 给initWithFrame空框架,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17117303/