Xcode5 iOS7 - UIPopoverController圆角半径

14

我正在将一个应用程序转换到iOS 7,这一过程相当顺利,但还有一件事情我无法解决。

我有一个视图控制器,其中包括几个按钮,我使用UIPopoverController显示它们。

看起来Popover Controller在剪辑其视图控制器的内容时会进行圆角处理。

iOS6(我想要这样):

enter image description here

iOS7(发生了某些变化):

enter image description here

我正在使用自定义Popover Controller背景类

这是我特定版本的背景类http://pastebin.com/fuNjBqwU

有没有人知道如何更改才能回到我的iOS 6外观?

3个回答

32

在弹出内容控制器中:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.view.superview.layer.cornerRadius = 0;
}

这个方案行得通。我在我的弹出式风格Storyboard Segue中加载了一个子类化的UINavigationController,并且在我的子类中实现了这个解决方案,我不再有内部圆角了。 - Phil
3
谢谢!以防其他人遇到和我一样的问题,我想补充说:如果你的contentView在一个navigationController中,你需要做如下调整:self.navigationController.view.superview.layer.cornerRadius = 0; - Logan

7

我尝试让@OneSman7的解决方案生效,但是cornerRadius视图不是contentViewController.view实例的直接上级视图。相反,我必须向上遍历视图层次结构,搜索cornerRadius为0的那个视图并重置它(它只是一个UIView实例,没有特殊的类名可供检查)。这不是最理想的解决方案,但目前似乎可以工作。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
        UIView *view = self.view;
        while (view != nil) {
            view = view.superview;
            if (view.layer.cornerRadius > 0) {
                view.layer.cornerRadius = 2.0;
                view = nil;
            }
        }
    }
}

如果视图没有父视图,则while可能会失败。在“if”之后放置“view = view.superview”。 - Misha

1
也许你只需要用以下代码替换背景视图的contentViewInsets:
+ (UIEdgeInsets)contentViewInsets{
    return UIEdgeInsetsZero;
}

然后只需在contentViewController的视图边缘上添加一些额外的填充,这样即使角仍然是圆角,也不会包含任何弹出内容,因此圆角效果将不可见。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接