自定义UINavigationBar sizeThatFits实现不返回实际的frame.size.width

zan*_*ona 2 resize uinavigationbar subclassing ios ios6

我试图UINavigationBar用定义的高度子类并尝试实现sizeThatFits方法:

@implementation NavigationBar

- (CGSize)sizeThatFits:(CGSize)size {
    NSLog(@"frame: %@", NSStringFromCGRect(self.frame));
    return CGSizeMake(self.frame.size.width, 62);
}

@end
Run Code Online (Sandbox Code Playgroud)

但显然self.frame.size.width总是返回一个奇怪的值,这不是1024,这是我的目标,它导致下面的行为:

http://f.cl.ly/items/2X3S2u2v1q2X472i0P1z/Image%202012.12.04%2015:27:47.png

NSLog 输出:

> frame: {{224, 20}, {576, 62}}
Run Code Online (Sandbox Code Playgroud)

手动定义CGSizeMake(1024, 62)此操作将导致以下情况:

http://f.cl.ly/items/1x3y1w2J1K1A0f2r0i1c/Image%202012.12.04%2015:34:42.png

隐藏按钮和NSLog输出将是:

> frame: {{-128, 20}, {1280, 62}}
Run Code Online (Sandbox Code Playgroud)

有关如何正确实现此方法的任何想法,以便导航栏延伸到所有窗口?

Ale*_*iks 9

如果您想避免使用"幻数",请尝试使用UINavigationBarsuperview的大小.

- (CGSize)sizeThatFits:(CGSize)size
{
    return CGSizeMake(self.superview.bounds.size.width, 62.0f);
}
Run Code Online (Sandbox Code Playgroud)

在iOS 6上适用于我.无需覆盖layoutSubviews.