override UITraitCollection of a UIView

1.1k Views Asked by At

I have a UITabBar which has to have a traitCollection with compact horizontalSizeClass. Because on a regular horizontalSizeClass, UITabBar renders TabBarIcon and Title side by side.

I did subclass UITabBar and overriden the traitCollection getter to give me modified traitCollection.

override var traitCollection: UITraitCollection{
    let current = super.traitCollection
    let compact = UITraitCollection(horizontalSizeClass: .compact)
    return UITraitCollection(traitsFrom: [current, compact])
}

This does the job but, I started getting below warning

Class MyTabBar overrides the -traitCollection getter, which is not supported. If you're trying to override traits, you must use the appropriate API.

After checking Apple Documentation I did find one API, overrideTraitCollection(forChild:) But the viewController which holds my UITabBar needs to have regular horizontalSizeClass.

I also found a similar question but it doesn't answer my question of overriding the traitCollection of a UIView.

I don't want to override the traitCollection of a UIViewController but only the UIView.

What is the right way to override traitCollection of a UIView?

0

There are 0 best solutions below