iOS UIResponder UITabBarController UITabBarController Height 변경하기

UITabBarController Height 변경하기

UIStoryBoard를 사용한다면 UITabBarItemCustomClass로 적용하기 매우 쉽다. 코드 베이스라면 UITabBarItem이 UITabBarController에서 자체적으로 가지고 있기 때문에 CustomClass를 적용하기가 애매해진다.

코드 베이스일때 init() RunTimeobject_setClass를 사용하여 self.tabBar classCustomClsss 로 변경해 UITabBarItem의 Height을 변경하는 솔루션이다.

final class CustomTabBarController: UITabBarController {
  class CustomHeightTabBar: UITabBar {
    override func sizeThatFits(_ size: CGSize) -> CGSize {
      var sizeThatFits = super.sizeThatFits(size)

      guard let window = UIApplication.shared.connectedScenes
              .compactMap({$0 as? UIWindowScene})
              .first?.windows
              .filter( { $0.isKeyWindow } ).first
      else { return sizeThatFits }

      let tabBarHeight: CGFloat = #HEIGHT#
      sizeThatFits.height = tabBarHeight + window.safeAreaInsets.bottom

      return sizeThatFits
    }
  }

  init() {
    super.init(nibName: nil, bundle: nil)
    object_setClass(self.tabBar, CustomHeightTabBar.self)
  }

  required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }
}

object_setClass

// Objective-C 에서 사용 시
objc_setClass(self.tabBar, CustomHeightTabBar.class);

댓글남기기