UINavigationBar의 사용자 지정 하위 클래스를 사용하는 UINavigationController를 사용하려고합니다. 그러나 initWithFrame에 문제가 있습니다. initWithFrame이 호출되면 치수를 인쇄하고 0.0 너비와 0.0 높이를 보여줍니다. 그러나 UINavigationBar 하위 클래스 내부의 - (void) layoutSubviews에서 같은 프레임을 인쇄하면 프레임이 올바르게 설정됩니다. initWithFrame이 크기가 0 인 프레임을받는 이유는 무엇이며이를 해결하려면 어떻게해야합니까? 수동으로 initWithFrame 또는 그와 비슷한 것을 호출하는 것은 정확하지 않습니다. UINavigationController가이를 처리해야하기 때문입니다.initWithFrame에 빈 프레임이 지정되었습니다.
AppDelegate.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;
}
감사합니다
- (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 다음은 관련 코드입니다!
어떤 문제가 발생합니까? – Wain
문제는 아니지만 UINavigationController에 의해 표면 상으로 호출되는 initWithFrame이 제로 x 제로 프레임을 제공받는 이유에 대해 조심스럽게 궁금해합니다. 사실 - (void) layoutSubviews에있는 UINavigationBar 하위 클래스를 초기화해야하나요? 아니면 initWithFrame에서 프레임이 잘못되도록 올바르게 설정하지 않았습니까? –