Установка альфа на 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' имеет альфа на экране (он не является непрозрачным, как ожидалось)
Как это и что можно сделать?
Ответы
Ответ 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
Установка непрозрачности цвета фона вместо альфа не повлияет на его дочерние представления.
- выберите вид.
- перейти к атрибуту инспектора, чем цвет фона
- нажмите на "другие"
- установить непрозрачность до 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.