2

我正在尝试UINavigationBar使用定义的高度进行子类化并尝试实现sizeThatFits方法:

@implementation NavigationBar

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

@end

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

NSLog输出:

> frame: {{224, 20}, {576, 62}}

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

隐藏按钮,NSLog输出将是:

> frame: {{-128, 20}, {1280, 62}}

关于如何正确实现此方法以使导航栏扩展到所有窗口的任何想法?

4

2 回答 2

9

如果你想避免使用“幻数”,可以尝试使用UINavigationBarsuperview 的大小。

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

在 iOS 6 上对我来说效果很好。无需覆盖layoutSubviews.

于 2013-04-24T20:10:35.833 回答
0

使用layoutSubviewsand sizeThatFitstogether 似乎有效:

- (CGSize)sizeThatFits:(CGSize)size {
    return CGSizeMake(1024, 62);
}

- (void)layoutSubviews {
    [super layoutSubviews];
    self.frame = CGRectMake(0, 20, 1024, 64);
}
于 2012-12-05T11:24:41.553 回答