Search code examples
iosuibarbuttonitemuitoolbarsize-classes

How can I hide UIBarbuttonItem on UIToolbar for small size class?


It's so pity that UIToolbar doesn't support size classes for UIBarbuttonItem elements. How can I hide UIBarbuttonItem on UIToolbar for small size class?


Solution

  • First, add this:

    - (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
        [super traitCollectionDidChange:previousTraitCollection];
        if ((self.traitCollection.verticalSizeClass != previousTraitCollection.verticalSizeClass)
            || (self.traitCollection.horizontalSizeClass != previousTraitCollection.horizontalSizeClass)) {
            [self setupToolbar:self.traitCollection.horizontalSizeClass];
        }
    }
    

    And then recreate toolbar items:

        if (horizontalSizeClass == UIUserInterfaceSizeClassCompact) {
            mainItems = [NSArray arrayWithObjects:..., nil];
        } else {
            mainItems = [NSArray arrayWithObjects:..., nil];
        }
        [mainToolbar setItems:mainItems animated:NO];