0

Using UITabBarAppearance for Tab Bar Changes in iOS 13

Giới thiệu

Có thể nói với mỗi lập trình viên iOS thì UI tabbar đã quá đỗi quen thuộc mỗi khi xây dựng ứng dụng iOS với nhiều màn hình và các tính năng riêng biệt. UItabbar giúp xây dựng ứng dụng chia theo các nhóm màn hình với các tính năng khác nhau, người dùng dễ dàng thao tác với các tính năng mà không cần phải đóng hoàn toàn các tính năng mình đang thao tác dở khi mở tính năng khác.

Với iOS 13, Apple đã thực hiện khá nhiều thay đổi để chúng ta có thể dễ dàng tuỳ chỉnh: hình nền, màu sắc, khoảng cách, font chữ... thông qua UITabBarAppearance , UIBarAppearance . Nào chúng ta cùng tìm hiểu nhé!

The Old Way

Ở iOS 12, chúng ta có thể thực hiện thao tác set background color và color cho các trạng thái selected/unselected bằng những dòng code dưới đây:

//Set the background color
    UITabBar.appearance().backgroundColor = .red
    tabBar.backgroundImage = UIImage()   //Clear background

    //Set the item tint colors
    tabBar.tintColor = .white
    tabBar.unselectedItemTintColor = .lightGray
    

Việc sử dụng UIAppearance để set một thuộc tính global như background color hoạt động tốt nhưng trên iOS 13 thì dường như không được như vậy ví dụ như việc hiển thị Tabbar trên UISplitViewController bị vỡ hoặc nhiều trường hợp xuất hiện lỗi. Vì vậy từ iOS 13 trở lên sẽ đòi hỏi chúng ta thực hiện theo cách khác để tuỳ chỉnh UItabbar.

New and Improved!

Với iOS 13, bạn có thể cài đặt background color với classs UITabBarAppearance và thuộc tính backgroundColor. Chú ý rằng phương thức này nó chỉ avaible từ iOS 13 trở lên. Dưới đây là đoạn code chúng tôi cài đặt tabbar màu đỏ.

//This example assumes a custom UITabBarController overridden class.  You can 
    //also use it anywhere the `tabBar` of the current `tabBarController` is available.
    let appearance = UITabBarAppearance()
    appearance.backgroundColor = .red
    tabBar.standardAppearance = appearance

Việc đặt màu cho tabbar icons và text ở trạng thái selectedunselected thông qua class UITabBarItemAppearance. Bạn có thể dễ dàng sử dụng cho rất nhiều các trạng thái: default normal, selected, disabled, or focused propertie cho iconColor, titleTextAttributes và các thuộc tính khác. Dưới đây là đoạn code thực hiện việc update color cho trạng thái normal và selected của tab bar items

    @available(iOS 13.0, *)
    private func setTabBarItemColors(_ itemAppearance: UITabBarItemAppearance) {
        itemAppearance.normal.iconColor = .lightGray
        itemAppearance.normal.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.lightGray]
        
        itemAppearance.selected.iconColor = .white
        itemAppearance.selected.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
    } 

Bạn có thể dễ dàng gọi function trên cho các kích thước màn hình khác nhau và thậm chí cả các trạng thái xoay view khác nhau như portraitlandscape

//Set all possible tab bar item styles as necessary (based on rotation and size capabilities).  Here
   //we're setting all three available appearances
   setTabBarItemColors(appearance.stackedLayoutAppearance)
   setTabBarItemColors(appearance.inlineLayoutAppearance)
   setTabBarItemColors(appearance.compactInlineLayoutAppearance)

Kết quả hiển thị dưới đây:

Nếu bạn muốn thao tác với title thì bạn sẽ tương tác với các thuộc tính như: titleTextAttributestitlePositionAdjustment

Setting Tab Bar Item Badge Appearance

Nếu bạn đã làm các tính năng liên quan đến thông báo thì chắc hẳn đã quá quen với thuộc tính Badge. Chúng ta cùng quan sát ảnh dưới đây để thấy rõ việc hiển thị Badge trên tabbar:


@available(iOS 13.0, *)
    private func setTabBarItemBadgeAppearance(_ itemAppearance: UITabBarItemAppearance) {
        //Adjust the badge position as well as set its color
        itemAppearance.normal.badgeBackgroundColor = .blue
        itemAppearance.normal.badgeTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
        itemAppearance.normal.badgePositionAdjustment = UIOffset(horizontal: 10, vertical: -10)
    }
    

Kết Luận

Hi vọng bài viết này đã giúp bạn có thể cập nhật thay đổi cho UITabbar được tốt hơn cũng như đảm bảo giao diện tabbar được hiển thị chính xác trên các thiết bị iOS với phiên bản hệ điều hành khác nhau.

Cám ơn bạn đã dành thời gian cho bài viết!

Nguồn:

https://insights.dice.com/2020/04/10/using-uitabbarappearance-tab-bar-changes-ios-13/


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí