ios - 自定义 UINavigationBar sizeThatFits 实现不返回真实的 frame.size.width

标签 ios resize ios6 uinavigationbar subclassing

我正在尝试使用定义的高度子类化 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}}

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

最佳答案

如果你想避免使用“魔数(Magic Number)”,可以尝试使用 UINavigationBar superview 的大小。

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

我在 iOS 6 上运行良好。无需覆盖 layoutSubviews

关于ios - 自定义 UINavigationBar sizeThatFits 实现不返回真实的 frame.size.width,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13706469/

相关文章:

iOS - [WKWebView .cxx_construct] 只能在主线程中使用

ios - AFNetworking 2.0//如何读取响应头

ios - 带有管理区域的应用程序可以添加文章

html - 将图像调整为更小的尺寸

ios - 如何升级到 Xcode 4.5

屏幕边缘附近的 iOS UIButton 无法正常响应点击

iphone - 调整 uinavigationbar 推送/弹出 View Controller 大小问题

html - 使用 HTML5 视频跟踪 move/调整大小事件?

ios - 自定义格式化文本标签的字符串值

iphone - iOS - 如何使用应用程序联系人有选择地导入/导出 iPad 联系人