Установка Альфа на UIView устанавливает Альфа на его подвидах, которые не должны происходить


согласно документации для UIVIew @property(nonatomic) CGFloat alpha

значение этого свойства является числом с плавающей запятой в диапазоне 0.0 до 1.0, где 0.0 представляет собой полностью прозрачный и 1.0 представляет собой совершенно непрозрачный. это значение влияет только на текущий вид и не влияет ни на один из его встроенных подвидов.

у меня есть представление контейнера, настроенное следующим образом:

self.myView.backgroundColor = [UIColor blackColor];
self.myView.alpha = 0.5;
[self addSubview:self.myView];

а затем добавить подвиды 'myView'

[myView addSubView anotherView];
anotherView.alpha = 1;
NSLog(@"anotherView alpha = %f",anotherView.alpha); // prints 1.0000 as expected

а 'anotherView ' имеет Альфа на экране (это не Непрозрачно, как ожидалось)

как это может быть и что можно сделать?

8 67

8 ответов:

Я думаю, это ошибка в документации. Вы должны подать его по адресу bugreport.apple.com.

все, что я вижу после небольшого быстрого исследования, предполагает, что вы видите, как он всегда вел себя, и мое собственное тестирование тоже это показывает.

Альфа вида применяется ко всем подвидам.

возможно, все, что вам нужно-это [[UIColor blackColor] colorWithAlphaComponent:0.5] но если нет, вам нужно будет сделать вид родного брата вместо ребенка.

Не устанавливайте Альфа непосредственно на родительском представлении. Вместо этого используйте нижеприведенную строку кода, которая будет применять прозрачность к parentview, не затрагивая его дочерние представления.

[parentView setBackgroundColor:[[UIColor clearColor] colorWithAlphaComponent:0.5]];

быстро

view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)

ОБНОВЛЕНО ДЛЯ SWIFT 3

view.backgroundColor = UIColor.white.withAlphaComponent(0.5)

Если вам нравятся раскадровки, поставьте User Defined Runtime Attribute для вашего взгляда в Identity Inspector:

Key Path: backgroundColor,Type: Color,Value: например, белый цвет с непрозрачностью 50 %.

установка непрозрачности цвета фона вместо альфа не повлияет на его дочерние представления.

  1. выберите вид.
  2. перейти к инспектору атрибутов, чем цвет фона
  3. нажмите на "другие"
  4. установите непрозрачность на 30%

вот и все. Счастливого Кодирования!!!

самое простое решение, как обсуждалось, чтобы изменить Альфа следующим образом : Обновленная версия для Xcode 8 Swift 3:

yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)

Цель C:

yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];

см. Apple Developer Docs здесь : https://developer.apple.com/reference/uikit/uiview/1622417-alpha

вот немного сложное решение:

UIView *container;
UIView *myView;
UIView *anotherView;

myView.alpha = 0.5;
[container addSubview:myView];

anotherView.alpha = 1;
[container addSubview:anotherView];

использовать container посмотреть в суперпанель, anotherView и myView оба подвида в container,anotherView не является подвидом в myView.

на данный момент есть только один способ сделать Родительский Вид прозрачный и не помещайте никаких дочерних представлений внутри (не помещайте никаких представлений в качестве подвида) родительского представления, поместите эти дочерние представления за пределы родительского представления. Чтобы сделать Родительский вид прозрачным, вы можете сделать это с помощью раскадровки.

//Transparent the parentView

parentView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.8)

поместите другой вид вне родительского вида. Он будет работать как шарм.