14

iPad アプリにポップアップ表示されるモーダル ビューがあり、何らかの理由で角が白く丸くなっています。

このモデル ビューは、プログラムではなくストーリーボードに作成したことに注意してください。ただし、私の viewWillAppear メソッドでは、角の半径を次のように設定しています...

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

6 以上の値を設定すると、白い角が見えるようになります。これらの白い丸い角が表示されないように、値を高く設定するにはどうすればよいですか?

あなたの知恵を前もってどうもありがとう!

4

9 に答える 9

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 window] setBackgroundColor:[UIColor blackColor]];

于 2012-10-19T02:59:48.343 に答える
0

それは変だ。それがうまくいくなら、それも試してくださいself.view.layer.masksToBounds = YES;。ただし、おそらくビューの影が失われるでしょう。

考えてみれば、あの白いものはおそらくナビゲーションバーの下のビューから来ています。

于 2012-10-19T00:42:29.553 に答える
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

ビュー コントローラを表示するために popoverpresentationcontroller を使用している場合は、popoverpresentationcontroller の backgroundcolor を clear に設定してみてください。

    examplePopUpController = exampleViewController.popoverPresentationController!
    examplePopUpController?.backgroundColor = UIColor.clear
于 2017-01-18T17:16:41.183 に答える
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 に答える