iOS 13 UISegmentController 适配

2021-07-08  本文已影响0人  喜欢吃生蚝

iOS 13

image.png

iOS 13 以前

image.png
1、.h文件

@interface UISegmentedControl (Category)

- (void)segmentedIOS13Style;

@end

2、.m文件

#import "UISegmentedControl+Category.h"

@implementation UISegmentedControl (Category)

- (void)segmentedIOS13Style {

    if (@available(iOS 13, *)) {

        UIColor *tintColor = [self tintColor];

        UIImage *tintColorImage = [self imageWithColor:tintColor];

        // Must set the background image for normal to something (even clear) else the rest won't work

        [self setBackgroundImage:[self imageWithColor:self.backgroundColor ? self.backgroundColor : [UIColor clearColor]] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

        [self setBackgroundImage:tintColorImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

        [self setBackgroundImage:[self imageWithColor:[tintColor colorWithAlphaComponent:0.2]] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

        [self setBackgroundImage:tintColorImage forState:UIControlStateSelected|UIControlStateSelected barMetrics:UIBarMetricsDefault];

        [self setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor], NSFontAttributeName: [UIFont systemFontOfSize:13]} forState:UIControlStateNormal];

        [self setTitleTextAttributes:@{NSForegroundColorAttributeName: tintColor, NSFontAttributeName: [UIFont systemFontOfSize:13]} forState:UIControlStateNormal];

        [self setDividerImage:tintColorImage forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

        self.layer.borderWidth = 1;

        self.layer.borderColor = [tintColor CGColor];

        self.selectedSegmentTintColor = tintColor;

    }

}

- (UIImage *)imageWithColor: (UIColor *)color {

    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);

    UIGraphicsBeginImageContext(rect.size);

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [color CGColor]);

    CGContextFillRect(context, rect);

    UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return theImage;

}

@end
上一篇下一篇

猜你喜欢

热点阅读