2015-07-07 31 views
9

Tôi đang cố gắng sao chép chuyển đổi push/pop ứng dụng iOS Âm nhạc từ bán trong suốt sang UINavigationBar trong suốt, trong khi vẫn giữ UIBarButtonItems hiển thị. Kể từ khi thanh điều hướng không di chuyển chính nó, tôi tin rằng bạn cần phải thiết lập UINavigationBar minh bạch cho cả UIViewControllers và thêm một subview cho UIViewController dưới UINavigationBar minh bạch để mô phỏng một UINavigationBar bán trong suốt. Bất kỳ giải pháp cho vấn đề này?Chuyển tiếp sang UINavigationBar trong suốt (Apple Music như Thanh Điều hướng)

iOS Music app transition

+0

efremidze, làm thế nào bạn kết thúc hoàn thành điều này? – SAHM

+0

Tôi đã sử dụng thư viện này: https://github.com/MoZhouqi/KMNavigationBarTransition – efremidze

Trả lời

8
+3

Một giải pháp khác: https://blog.austinchou.com/apple-music-like-navigation-bar/ – avdyushin

+0

@avdyushin Cảm ơn, liên kết tuyệt vời! – efremidze

+0

thực sự là libs này không giống như được triển khai trong nhạc trên google ... –

4

On điều khiển chi tiết của bạn đặt mã này

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    guard self.navigationController?.topViewController === self else {return} 

    self.transitionCoordinator()?.animateAlongsideTransition({ [weak self](context) in 
     self?.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) 
     self?.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) 

     }, completion: { context in 
    }) 
} 

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 

    guard self.navigationController?.topViewController === self else {return} 

    self.transitionCoordinator()?.animateAlongsideTransition({ [weak self](context) in 
     self?.navigationController?.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default) 
     self?.navigationController?.navigationBar.setBackgroundImage(nil, forBarMetrics: .Default) 
     }, completion: { context in 
    }) 
} 
+0

Điều này gần như hoàn hảo, thay vì hai hàm 'setBackgroundImage', một hàm phải là thuộc tính' shadowImage', trong đó tôi đặt nó thành một 'UIImage()' thay vì nil. Ngoài ra, các câu lệnh bảo vệ dường như không cần thiết trong tôi, không chắc chắn nếu nó tạo ra sự khác biệt –

+1

Lưu ý rằng để làm việc này, thuộc tính 'edgesForExtendedLayout' trên bộ điều khiển xem trình bày của bạn không được bao gồm cạnh trên (tức là cạnh tương ứng với thanh điều hướng). Nếu không, nội dung mở rộng của bạn sẽ hiển thị qua thanh điều hướng khi nó trở nên trong suốt trong quá trình chuyển đổi. Nếu sử dụng chế độ xem bảng hoặc chế độ xem bộ sưu tập, bạn có thể cần phải cuộn xuống trước khi bạn thấy điều này xảy ra. Để giữ 'edgeForExtendedLayout', bạn cần phải tạo thanh điều hướng trình giữ chỗ hoặc thử một giải pháp như [TFTransparentNavigationBar] (https://github.com/thefuntasty/TFTransparentNavigationBar). – jamesk

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