Подтвердить что ты не робот

Установка альфа на 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];

Затем добавьте subviews в 'myView'

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

В быстрой

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

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

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

Ответ 4

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

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

Или вы можете установить программно

var customView:UIView = UIView()
customView.layer.opacity = 0.3

Это оно. Удачного кодирования !!!

Ответ 5

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

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

Ответ 6

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

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

Цель C:

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

См. Документы Apple для разработчиков здесь: https://developer.apple.com/reference/uikit/uiview/1622417-alpha

Ответ 7

Вот несколько сложное решение:

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.

Ответ 8

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

//Transparent the parentView

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

Поместите другой вид за пределы родительского. Это будет работать как шарм.

Ответ 9

В Swift 4.2 и Xcode 10.1

Не добавляйте цвет и альфа-значение через раскадровку. Только программный подход будет работать в этом случае.

transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)

Ответ 10

Пожалуйста, обратитесь к жирному описанию из документации XCode.

Значением этого свойства является число с плавающей запятой в диапазоне от 0,0 до 1,0, где 0,0 представляет собой полностью прозрачный, а 1,0 - полностью непрозрачный. Изменение значения этого свойства обновляет альфа-значение только текущего представления. Однако прозрачность, придаваемая этим альфа-значением, влияет на все содержимое представления, включая его подвиды. Например, подпредставление с альфа-значением 1,0, которое встроено в родительское представление с альфа-значением 0,5, отображается на экране, как если бы его альфа-значение также составляло 0,5.