Đặt alpha trên UIView đặt alpha trên các lượt xem phụ của nó, điều này sẽ không xảy ra


86

Theo tài liệu cho UIVIew @property(nonatomic) CGFloat alpha

Giá trị của thuộc tính này là một số dấu phẩy động trong phạm vi 0,0 đến 1,0, trong đó 0,0 biểu thị hoàn toàn trong suốt và 1,0 biểu thị hoàn toàn không trong suốt. Giá trị này chỉ ảnh hưởng đến chế độ xem hiện tại và không ảnh hưởng đến bất kỳ chế độ xem phụ nào được nhúng của nó.

Tôi có một chế độ xem vùng chứa được định cấu hình như sau:

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

Và sau đó thêm lượt xem phụ vào 'myView'

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

Nhưng ' anotherView ' không có alpha trên màn hình (nó không mờ đục như mong đợi)

Làm thế nào điều này có thể được và những gì có thể được thực hiện?


Có thể thứ tự thêm lượt xem phụ và đặt alpha là quan trọng. Hãy thử chơi với các chuỗi khác nhau.
Tham gia

Thêm tất cả mã tạo của anotherView :) và tôi cũng nghĩ rằng đó là lỗi đánh máy nhưng bạn có chắc là bạn đã khởi tạo self.myView? và thêm anotherView ví dụ như[self.self addSubview:self.myView];
iPatel

1
thực sự, tài liệu đúng: điều đó sẽ không ảnh hưởng đến các lượt xem phụ được nhúng của nó và alpha của các lượt xem phụ luôn giống nhau - nhưng các lượt xem được hiển thị có một alphagiá trị là tất cả các alphagiá trị của lượt xem phụ, được nhân lên. ví dụ: nếu alpha của lượt xem phụ 0.8và alpha của superview là 1.0, nhưng bạn thay đổi nó thành 0.6, alpha của lượt xem phụ vẫn giống nhau , 0.8. giá trị alpha của lượt xem phụ được hiển thị chỉ được thay đổi từ 0.8thành 0.48.
holex

Câu trả lời:


117

Tôi nghĩ rằng đây là một lỗi trong tài liệu. Bạn nên gửi nó tại bugreport.apple.com.

Mọi thứ tôi có thể thấy sau một chút nghiên cứu nhanh cho thấy những gì bạn đang thấy là cách nó luôn hoạt động và thử nghiệm của riêng tôi cũng cho thấy điều đó.

Alpha của một chế độ xem được áp dụng cho tất cả các lượt xem phụ.

Có lẽ tất cả những gì bạn cần là có, [[UIColor blackColor] colorWithAlphaComponent:0.5]nhưng nếu không, bạn sẽ cần phải coi việc xem đó là anh chị em thay vì trẻ em.


21
+1. FWIW, tôi nghĩ rằng các tài liệu được cho là đúng, nếu cực kỳ không rõ ràng (đến mức không chính xác cho mọi mục đích thực tế). Alpha của các lượt xem phụ bị ảnh hưởng, nhưng không ảnh hưởng đến giá trị alpha. Đây là hành vi tương tự, tôi nghĩ, đối với tài sản ẩn. Đặt ẩn sẽ ẩn các lượt xem phụ, nhưng không làm cho thuộc tính ẩn lượt xem phụ được đặt.
Bjorn Roche

2
tôi đã yêu cầu để hiển thị một cái nhìn một số điều như uipopover nhưng trong iphone.I đã tạo ra một UIViewController với [[UIColor blackColor] colorWithAlphaComponent: 0,5] .thanks nó làm việc
Alok

2
Tôi không tin rằng các tài liệu "được cho là chính xác" chút nào. Trong thế giới thực, các nhà phát triển sẽ đọc tài liệu và tin rằng các alpha trẻ em không bị ảnh hưởng. Trong thực tế, khi nào, kết quả tổng hợp sẽ giống như các alpha đã được sửa đổi. Đó chỉ là một trường hợp tài liệu không tốt.
Womble

43

Không đặt alpha trực tiếp trên chế độ xem chính. Thay vì nó, hãy sử dụng dòng mã dưới đây sẽ áp dụng tính minh bạch cho chế độ xem phụ huynh mà không ảnh hưởng đến chế độ xem con của nó.

[parentView setBackgroundColor: [[UIColor clearColor] colorWithAlphaComponent: 0,5]];


mã này không hoạt động với ios và xcode mới nhất. bất cứ ai có ý tưởng khác nhau?
Moxarth

1
Thông minh!! Cho nhanh 4 sử dụng: parentView.backgroundColor = UIColor.black.withAlphaComponent (0.5)
Rakesh Yembaram

Giải pháp tuyệt vời.
iLearner

27

Nhanh chóng

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

CẬP NHẬT CHO SWIFT 3

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

2
Điều này không giải quyết câu hỏi được hỏi.
David Berry

Điều này khiến tôi gặp lỗi: "Giá trị của loại 'UIColor' không có thành viên 'colorWithAlphaComponent'".
Krivvenz

1
Xin chào @Krivvenz, 'colorWithAlphaComponent' đã được đổi tên thành 'withAlphaComponent'. Xem câu trả lời đã chỉnh sửa của tôi.
Nazarii Stadnytskyi

mã này không hoạt động. chúng ta không thể thấy chế độ xem được đẩy là trong suốt. có ai có bất kỳ ý tưởng khác?
Moxarth

21

Đặt Opacity của màu nền thay vì alpha sẽ không ảnh hưởng đến các chế độ xem con của nó.

  1. chọn chế độ xem.
  2. chuyển đến trình kiểm tra thuộc tính thay vì màu nền
  3. nhấp vào "những người khác"
  4. đặt độ mờ thành 30%

Hoặc bạn có thể đặt theo chương trình

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

Đó là nó. Mã hóa vui vẻ !!!


Có cách nào để làm điều này theo chương trình không?
DCIndieDev

@DCIndieDev Rất tiếc, tôi không tìm thấy độ mờ là thuộc tính của UIView. Vì vậy, thiết lập bởi bảng phân cảnh.
MRizwan33 19/09/18

Đây là một câu trả lời tuyệt vời. Làm việc rất tốt.
Joe Susnick

Đây phải là câu trả lời được chấp nhận, Làm việc khi cần thiết. Cảm ơn.
Missa

1
@ MRizwan33 Bạn có thể truy cập thuộc tính opacity từ [your UIView] .layer.opacity
Missa

16

Nếu bạn thích Bảng phân cảnh, hãy đặt User Defined Runtime Attributechế độ xem của bạn trong Identity Inspector:

Key Path: backgroundColor, Type: Color, Value:Ví dụ như màu trắng với Opacity 50%.


Câu trả lời chính xác! Trong Trình kiểm tra thuộc tính, tôi đặt alpha của chế độ xem thành một. Trong Trình kiểm tra danh tính, tôi chèn đường dẫn khóa như trên với Độ mờ 50%. Độ mờ của chế độ xem hiện là 50%, nhưng độ mờ của chế độ xem phụ vẫn là 100%. Tôi cho rằng alpha và opacity KHÔNG giống nhau.
etayluz

6

Giải pháp đơn giản nhất như đã thảo luận là thay đổi alpha như sau: Phiên bản cập nhật cho Xcode 8 Swift 3 là:

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

Mục tiêu C:

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

Tham khảo Tài liệu dành cho nhà phát triển của Apple tại đây: https://developer.apple.com/reference/uikit/uiview/1622417-alpha


vâng, tôi đã áp dụng điều này, nhưng chế độ xem không minh bạch. Tôi đã sử dụng mã này trước đó nhiều lần. nhưng lần này nó không hoạt động. và hiển thị chế độ xem của tôi dưới dạng màu đen đặc. vậy bất kỳ phương pháp thay thế nào hoặc nó đã thay đổi với các bản cập nhật iOS mới?
Moxarth

Hầu hết có lẽ khung nhìn đằng sauParentView của bạn phải là màu đen đặc, vui lòng kiểm tra bảng phân cảnh của bạn để tìm xib và mã của bạn xem nó có được đặt thành màu đen từ bất kỳ nơi nào khác hay không. Hy vọng điều này sẽ hữu ích
Ankit Kumar Gupta

tôi chỉ đang đẩy một góc nhìn khác từ một góc nhìn. chế độ xem được đẩy sẽ xuất hiện trong suốt sau mã này. tôi đã sử dụng nó nhiều lần trước đó. nó đơn giản như thế này. -> cài đặt * set = [[cài đặt phân bổ] initWithNibName: @ "cài đặt" gói: nil]; -> set.view.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent: 0,3f]; -> [self.navigationController pushViewController: set animation: YES];
Moxarth

bạn đang sử dụng xib hay bảng phân cảnh?
Ankit Kumar Gupta

nhưng bây giờ tôi đang sử dụng mã này và nó không hoạt động. chế độ xem được đẩy sẽ xuất hiện với màu đồng nhất tùy theo màu mà chúng tôi đã đưa ra và không trong suốt.
Moxarth

4

Trong Swift 4.2 và Xcode 10.1

Không thêm màu sắc và giá trị alpha thông qua bảng phân cảnh. Chỉ cách tiếp cận có lập trình mới hoạt động trong trường hợp này.

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

@iOS Cảm ơn bạn, cái này đã giúp tôi.
Raghuram

2

Đây là một giải pháp phức tạp:

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

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

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

Sử dụng một containerchế độ xem làm superview anotherViewmyViewcả hai đều là subview in container, anotherViewkhông phải là subview in myView.


2

Hiện tại, chỉ có một cách làm cho Chế độ xem cha trong suốt và không đặt bất kỳ chế độ xem con nào bên trong (không đặt bất kỳ chế độ xem nào làm chế độ xem phụ) chế độ xem mẹ, hãy đặt các chế độ xem con đó bên ngoài chế độ xem mẹ. Để làm cho chế độ xem của phụ huynh trở nên minh bạch, bạn có thể làm điều này thông qua bảng phân cảnh.

//Transparent the parentView

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

Đặt chế độ xem khác bên ngoài chế độ xem chính. Nó sẽ hoạt động như một sự quyến rũ.


0

Vui lòng tham khảo mô tả in đậm từ tài liệu Xcode.

Giá trị của thuộc tính này là một số dấu phẩy động trong phạm vi 0,0 đến 1,0, trong đó 0,0 biểu thị hoàn toàn trong suốt và 1,0 biểu thị hoàn toàn không trong suốt. Thay đổi giá trị của thuộc tính này chỉ cập nhật giá trị alpha của chế độ xem hiện tại. Tuy nhiên, tính minh bạch được truyền bởi giá trị alpha đó ảnh hưởng đến tất cả nội dung của chế độ xem, bao gồm cả các chế độ xem phụ của nó. Ví dụ: một chế độ xem phụ có giá trị alpha là 1,0 được nhúng trong chế độ xem chính với giá trị alpha là 0,5, xuất hiện trên màn hình như thể giá trị alpha của nó cũng là 0,5.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.