iOS:为什么我的模态视图上有白色圆角?

时间:2012-10-19 00:07:06

标签: iphone ios ipad

我的iPad应用程序中出现了一个模态视图,出于某种原因,它有白色圆角。

值得注意的是,我在故事板中构建了此模型视图,而不是以编程方式构建。但是,在我的viewWillAppear方法中,我正在设置角半径......

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

当我将值设置为6以上时,白色角落变得可见。如果没有显示这些白色圆角,我怎样才能设置更高的值?

非常感谢您的智慧!

9 个答案:

答案 0 :(得分:17)

您的问题对于您的视图控制器使用的是什么类型的演示文稿是模棱两可的,所以我假设您正在使用表单。解决方案是将superview的背景颜色设置为[UIColor clearColor],以防止出现半透明背景:

- (void) viewDidAppear:animated
{
    [super viewDidAppear:animated];

    self.view.layer.cornerRadius = 10;
    self.view.layer.masksToBounds = YES;
    self.view.superview.backgroundColor = [UIColor clearColor];
}

在设置backgroundColor之前:

Before

设置backgroundColor后:

After

答案 1 :(得分:11)

尝试

[self.view superview].layer.cornerRadius = 21.0f;
[self.view superview].layer.masksToBounds = YES;

答案 2 :(得分:2)

我意识到这是一个古老的问题,但值得回答......

在iPad上,模态视图(使用UIModalPresentationFormSheet)具有默认背景,这是一个白色边框图像,带有白色的狗耳角。无论如何,如果您的模态视图背景具有圆角或透明角,则默认背景将显示。

我花了很多时间试图弄清楚如何在没有默认背景显示的情况下显示背景视图。诀窍是让superview比你的视图更小:

vc.view.clipsToBounds = NO;
vc.view.superview.bounds = CGRectMake(vc.view.superview.bounds.origin.x, vc.view.superview.bounds.origin.y, 300, 480);

注意:vc是您要呈现的视图。不要让视图太小,否则你的触摸事件将无效。

答案 3 :(得分:0)

这很奇怪。如果有效,请尝试self.view.layer.masksToBounds = YES;。你可能会失去视图的阴影。

想一想,白色的东西可能来自导航栏下面的视图。

答案 4 :(得分:0)

尝试使用app delegate:[[self window] setBackgroundColor:[UIColor blackColor]];

答案 5 :(得分:0)

我是我的情况,白色的东西隐藏在阴影的背景颜色的视图中。 通过改变背景来解决清晰的颜色:

//Monotouch code
View.Superview.Layer.BackgroundColor = UIColor.Red.CGColor;

如果它没有摆脱白角继续搜索,请记得查看View,SuperView和BackgroundViews的一些属性:

  • 背景颜色
  • 图层的背景颜色
  • 图层的边框宽度和颜色
  • 标题
  • 剪辑到界限

注意:DropShadow在ViewWillApper

处显示为View的SuperView

答案 6 :(得分:0)

我同意@PeterPurple的回答,但我花了一些时间来提出实际工作的代码。我的示例显示了一个水平居中的模态视图,但是更多地放在屏幕顶部,因此视图不会妨碍键盘。当然,我可以在键盘显示时向上移动视图,但我很懒。无论如何,这就是我做到的。

我创建了一个自定义模态segue,在那个segue中我覆盖了perform:方法,如下所示:

@implementation CustomSegue

static const CGFloat TOP_MARGIN = 40;
static const CGFloat SUPER_VIEW_GAP = 10;

- (void)perform {
    UIView *destView = [self.destinationViewController view];

    [self.destinationViewController setModalPresentationStyle:UIModalPresentationPageSheet];
    [self.destinationViewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [[self sourceViewController] presentViewController:[self destinationViewController] animated:YES completion:nil];

    CGFloat x, y, width, height, yCenter;
    CGSize contentSize = [self.destinationViewController contentSizeForViewInPopover];

    x = destView.superview.frame.origin.x;
    y = destView.superview.frame.origin.y;
    width = contentSize.width;
    height = contentSize.height;
    yCenter = (height / 2.0) + TOP_MARGIN;

    destView.superview.frame = CGRectMake(x + SUPER_VIEW_GAP, y + SUPER_VIEW_GAP, width - (SUPER_VIEW_GAP * 2), height - (SUPER_VIEW_GAP * 2));
    destView.superview.autoresizingMask = UIViewAutoresizingNone;
    destView.superview.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin;
    destView.superview.center = CGPointMake([[self.sourceViewController view] center].x, yCenter);
    destView.frame = CGRectMake(-SUPER_VIEW_GAP, -SUPER_VIEW_GAP, width, height);
}

答案 7 :(得分:0)

为了使模态视图透明并在视图出现之前使透明度发生,将self.view.superview.backgroundColor = [UIColor clearColor]从viewDidAppear移动到以下内容:

  • (无效)viewWillLayoutSubviews { [super viewWillLayoutSubviews];

    self.view.superview.backgroundColor = [UIColor clearColor]; }

答案 8 :(得分:0)

如果您使用popoverpresentationcontroller来显示视图控制器,请尝试设置popoverpresentationcontroller的backgroundcolor以清除

[0-9,.$\-\+]

0-9 a single character in the range between 0 (ASCII 48) and 9 (ASCII 57) 
,.$ matches a single character in the list ,.$
\- matches the character - literally 
\+ matches the character + literally