导航栏框架尺寸计算

时间:2018-11-16 14:42:52

标签: ios objective-c uinavigationbar

我正在使用以下各行获取导航栏框架的大小,直到iOS版本11都可以正常使用,但是将iOS版本升级到11后,其返回的零值为(0,0)。谁能帮我解决这个问题。

CGRect frame = self.superview.frame;

            // Look for the navigation bar.
            UINavigationBar *navigationBar;
            UIView *superView = self;
            while (superView.superview)
            {
                if ([superView.superview isKindOfClass:[UINavigationBar class]])
                {
                    navigationBar = (UINavigationBar*)superView.superview;
                    break;
                }

                superView = superView.superview;
            }

            if (navigationBar)
            {
                CGSize navBarSize = navigationBar.frame.size;
                CGFloat superviewCenterX = frame.origin.x + (frame.size.width / 2);

                // Check whether the view is not moving away (see navigation between view controllers).
                if (superviewCenterX < navBarSize.width)
                {
                    // Center the display name
                    self.displayNameCenterXConstraint.constant = (navBarSize.width / 2) - superviewCenterX;
                }
            }

1 个答案:

答案 0 :(得分:1)

您永远不会初始化NavigationBar,所以我假设您正在尝试获取null的navBarSize。

如果您在具有导航栏的视图控制器中使用此代码,则可以考虑以下几行:

UINavigationBar *navigationBar = self.navigationController.navigationBar;
CGSize navBarSize = navigationBar.frame.size;

如果这不符合您的需求,建议您添加其他示例代码/上下文,以说明出现问题或尝试执行的操作。