我在一個非常哈克的方式解決了這個問題 - 子類UINavigationController
和攪和其navigationBar
的setCenter:
方法(與Aspects庫混寫完成):
// In subclassed UINavigationController:
- (void) viewDidLoad
{
[super viewDidLoad];
// This just fixes this bug: http://stackoverflow.com/q/23471624/299063
UINavigationBar *navigationBar = self.navigationBar;
[navigationBar aspect_hookSelector:@selector(setCenter:) withOptions:AspectPositionInstead usingBlock:^(id<AspectInfo> aspectInfo)
{
NSValue *centerValue = aspectInfo.arguments[0];
CGPoint center = [centerValue CGPointValue];
CGPoint fixedCenter = CGPointMake(center.x, 20 + navigationBar.bounds.size.height/2);
[[aspectInfo originalInvocation] setArgument:&fixedCenter atIndex:2];
[[aspectInfo originalInvocation] invoke];
}
error:nil];
}
我也不得不在導航控制器的子控制器中設置automaticallyAdjustsScrollViewInsets
至NO
,否則導航欄在第一次出現時仍然會出現錯誤的位置:
// In child controller of UINavigationController.
self.automaticallyAdjustsScrollViewInsets = NO;
也許有正確的做法,但我沒有時間。
你解決了這個問題嗎? – longilong
是/否,我停止使用導航控制器,它在您將視圖控制器中的UINavigationBar添加爲視圖時起作用 – Augard