IOS: Почему у меня есть белые округлые углы на моем модальном представлении?
У меня есть модальный вид, появляющийся в моем приложении для iPad, и по какой-то причине он имеет белые округлые углы.
Возможно, стоит отметить, что я построил этот образ модели в своем раскадровке, а не программно. Однако, в моем методе viewWillAppear, я устанавливаю радиус угла так...
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.view.layer.cornerRadius = 6.0f;
}
Когда я устанавливаю значение выше 6, белые углы становятся видимыми. Как я могу установить значение выше, не показывая эти белые округлые углы?
Большое спасибо за вашу мудрость!
Ответы
Ответ 1
Ваш вопрос неоднозначен в отношении того, какую презентацию вы используете для своего контроллера представлений, поэтому я собираюсь предположить, что вы используете лист формы. Решение состоит в том, чтобы установить цвет фона супервизора [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]()
Ответ 2
Try
[self.view superview].layer.cornerRadius = 21.0f;
[self.view superview].layer.masksToBounds = YES;
Ответ 3
Я понимаю, что это старый вопрос, но он заслуживает ответа...
В 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 - это представление, которое вы представляете. Не делайте вид слишком малым, иначе ваше событие касания не будет работать.
Ответ 4
Это странно. Попробуйте self.view.layer.masksToBounds = YES;
тоже, если это работает. Вероятно, вы потеряете свои тени.
Подумайте об этом, эта белая вещь, вероятно, приходит из представления под вашей навигационной панелью.
Ответ 5
Попробуйте делегат приложения: [[self window] setBackgroundColor:[UIColor blackColor]];
Ответ 6
Я в моем случае белые вещи скрыты в тени тени на цвет фона слоя.
Решенный путем изменения фона для очистки цвета:
//Monotouch code
View.Superview.Layer.BackgroundColor = UIColor.Red.CGColor;
Если он не избавится от белого угла, продолжайте поиск, не забудьте проверить некоторые свойства View, SuperView и BackgroundViews:
- Цвет фона
- Цвет фона слоя
- Ширина и цвет границы слоя
- Заголовок
- Клип к границам
Примечание. DropShadow отображается как просмотр SuperView при ViewWillApper
Ответ 7
Я согласен с ответом @PeterPurple, но мне потребовалось некоторое время, чтобы придумать код, который действительно работал. В моем примере отображается модальное представление, которое центрируется по горизонтали, но поместите его ближе к верхней части экрана, чтобы представление не мешало клавиатуре. Конечно, я мог просто переместить представление, когда на клавиатуре появится, но я ленив. Во всяком случае, вот как я это сделал.
Я создал собственный modal segue и в этом segue я перепробовал выполнить: метод как таковой:
@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);
}
Ответ 8
Чтобы сделать прозрачный вид модальности и сделать прозрачность до появления представления, нужно переместить self.view.superview.backgroundColor = [UIColor clearColor] из viewDidAppear в следующее:
Ответ 9
Если вы используете диспетчер popoverpresentation для отображения своего контроллера представлений, попробуйте установить цвет фона для диспетчера popoverpresentation, чтобы очистить
examplePopUpController = exampleViewController.popoverPresentationController!
examplePopUpController?.backgroundColor = UIColor.clear