14

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

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

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

当我将值设置为 6 以上时,白色角变得可见。如何在不显示这些白色圆角的情况下将值设置得更高?

非常感谢您的智慧!

4

9 回答 9

20

您的问题对于您为视图控制器使用的演示文稿类型模棱两可,所以我假设您使用的是表单。解决方法是将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

前

设置后backgroundColor

后

于 2014-02-12T18:15:03.340 回答
11

尝试

[self.view superview].layer.cornerRadius = 21.0f;
[self.view superview].layer.masksToBounds = YES;
于 2013-02-06T09:07:34.380 回答
2

我意识到这是一个老问题,但它值得一个答案......

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

我花了相当多的时间试图弄清楚如何在没有默认背景显示的情况下显示我的背景视图。诀窍是使超级视图小于您的视图:

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

注意: vc 是您呈现的视图。不要使视图太小,否则您的触摸事件将不起作用。

于 2013-04-15T15:01:19.993 回答
0

这很奇怪。尝试self.view.layer.masksToBounds = YES;。不过,您可能会失去视图的阴影。

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

于 2012-10-19T00:42:29.553 回答
0

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

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

如果没有去掉白角继续搜索,记得查看View、SuperView和BackgroundViews的一些属性:

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

注意:DropShadow 作为 View 的 SuperView 可见于ViewWillApper

于 2013-04-21T00:30:18.717 回答
0

在应用程序委托中尝试:[[self window] setBackgroundColor:[UIColor blackColor]];

于 2012-10-19T02:59:48.343 回答
0

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

  • (void)viewWillLayoutSubviews{ [super viewWillLayoutSubviews];

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

于 2014-06-26T15:09:32.897 回答
0

我同意@PeterPurple 的回答,但我花了一些时间才想出真正有效的代码。我的示例显示了一个水平居中的模态视图,但更多地位于屏幕顶部,因此视图不会阻碍键盘。当然,当键盘显示时,我可以将视图向上移动,但我很懒。无论如何,这就是我的做法。

我创建了一个自定义模态序列,并在该序列中覆盖了 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);
}
于 2013-08-22T20:58:29.327 回答
0

如果您使用 popoverpresentationcontroller 来显示视图控制器,请尝试将 popoverpresentationcontroller 的 backgroundcolor 设置为 clear

    examplePopUpController = exampleViewController.popoverPresentationController!
    examplePopUpController?.backgroundColor = UIColor.clear
于 2017-01-18T17:16:41.183 回答