2014-09-24 25 views
6

Tôi đang tạo một UITableViewController (tại gốc của một UINavigationController) và trình bày phương thức này trên đầu trang của một bộ điều khiển khung nhìn khác. Tôi có nó hoạt động ở mức độ nào đó, như vậy khi khung nhìn tải và viewDidAppear được gọi, hiệu ứng hình ảnh có vẻ tốt. Nhưng ngay sau khi viewDidAppear, hiệu ứng hình ảnh biến mất và bảng nhìn có nền trắng.UIVisualEffectView trên nền UITableView

Trong UITableViewController giới của tôi, tôi đã thêm này trong viewDidLoad:

if (NSClassFromString(@"UIVisualEffectView") && !UIAccessibilityIsReduceTransparencyEnabled()) { 
    self.tableView.backgroundColor = [UIColor clearColor]; 
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; 
    UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; 
    [blurEffectView setFrame:self.tableView.frame]; 

    self.blurView = blurEffectView; 
    self.tableView.backgroundView = self.blurView; 
} 

Tôi cũng thực hiện điều này, để đảm bảo các tế bào có lý lịch rõ ràng:

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ 
    if (NSClassFromString(@"UIVisualEffectView")) { 
     cell.backgroundColor = [UIColor clearColor]; 
    } 
} 

Tôi cũng thiết lập các cell.backgroundColor = [UIColor clearColor] trong tableView's cellForRowAtIndexPath: nhưng điều đó không giúp được gì.

Một lần nữa, tôi nhận được hiệu ứng chính xác khi khung nhìn tải, nhưng nó mất nền mờ ngay sau khi nó xuất hiện trên màn hình. Bất kỳ ý tưởng gì có thể sẽ sai? Tôi cũng đã cố gắng giữ lại blueEffectView như một thuộc tính trong bộ điều khiển xem của tôi, nhưng không có may mắn

+0

bạn có giải pháp cho sự cố không? Tôi nghĩ rằng tôi có cùng một vấn đề. Sau khi thiết lập BackgroundView 'tableView.backgroundView' tôi có BackgroundView màu xám nhạt ** mà không có bất kỳ hiệu ứng làm mờ nào. – Stone

+0

@Stone hi, tôi gặp vấn đề tương tự. Bạn có ý tưởng gì không? –

+0

@Wongzigii tiếc là không. vẫn không có giải pháp. – Stone

Trả lời

3

Vấn đề là khi bạn trình bày một bộ điều khiển xem một cách bình thường với cài đặt mặc định, khi nó đã hoàn thành việc chiếm màn hình, xem bộ điều khiển dường như bị xóa. Đây là lý do tại sao hiệu ứng mờ của bạn trông tuyệt vời cho đến khi hoạt ảnh trình diễn hoàn thành - chế độ xem cơ bản biến mất.

Để thực hiện hành vi mong muốn, bạn sẽ cần phải thay đổi kiểu hiển thị segue thành thứ gì đó sẽ duy trì bộ điều khiển xem cơ bản, như Over Full Screen thay vì Full Screen mặc định.

Lưu ý rằng khi bạn loại bỏ bản trình bày phương thức này, viewDidAppear sẽ không được gọi trên trình điều khiển chế độ xem hiện tại, vì bây giờ nó luôn hiển thị. Điều đó có thể cắn bạn nếu bạn dựa vào phương pháp đó để thực hiện bất kỳ chức năng nào sau khi bị sa thải.

+0

Đã xảy ra sự cố tương tự. Và sửa chữa này đã làm các trick !! Đây là cách tôi đã lập trình (Obj-C và Swift) 'viewToBePresented.modalPresentationStyle = UIModalPresentationCurrentContext; viewToBePresented.modalTransitionStyle = UIModalTransitionStyleCoverVertical; ' ' viewToBePresented.modalTransitionStyle = UIModalTransitionStyle.CoverVertical viewToBePresented.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen' – Priest

+0

@Priest bạn có một typo: các modalPresentationStyle bạn muốn là UIModalPresentationOverCurrentContext (obj-C) và OverCurrentContext (Swift) –

6

Bạn đang sử dụng Bảng phân cảnh?

Chọn bộ điều khiển chế độ xem được sử dụng một cách bình thường (hoặc nếu được bọc trong VC khác, chọn trình bao bọc) và đặt hộp kết hợp Bản trình bày thành "Toàn màn hình" hoặc "Trong ngữ cảnh hiện tại". (Tôi không thực sự biết những gì là sự khác biệt, cả hai đều có vẻ làm điều tương tự.)

Screenshot of Xcode

Sau khi làm điều đó, hiệu ứng mờ ảo của bạn nên chỉ làm việc ™. Ngoài ra, tôi nghĩ rằng đây là mới trong iOS 8, tôi chưa thử nghiệm này trong iOS 7 được nêu ra.

Các vấn đề liên quan