美文网首页
HMSegmentControl (iOS10)

HMSegmentControl (iOS10)

作者: 易爆物品 | 来源:发表于2016-08-30 11:18 被阅读0次

在iOS10,Xcode8beta上运行HMSegmentControl时会出现,title不显示的情况,如图:

在源码中做如下修改即可正常显示,添加方法

- (UIFont *)attributedFontAtIndex:(NSInteger)index

{

BOOL selected = (index == self.selectedSegmentIndex) ? YES : NO;

NSDictionary *titleAttrs = selected ? [self resultingSelectedTitleTextAttributes] : [self resultingTitleTextAttributes];

UIFont *font = [titleAttrs objectForKey:NSFontAttributeName];

if (!font) {

font = [UIFont systemFontOfSize:18];

}

return font;

}

- (UIColor *)attributedColorAtIndex:(NSInteger)index

{

BOOL selected = (index == self.selectedSegmentIndex) ? YES : NO;

NSDictionary *titleAttrs = selected ? [self resultingSelectedTitleTextAttributes] : [self resultingTitleTextAttributes];

UIColor *color = [titleAttrs objectForKey:NSForegroundColorAttributeName];

if (!color) {

color = [UIColor blackColor];

}

return color;

}

在drawRect:方法中:

CATextLayer *titleLayer = [CATextLayer layer];

titleLayer.frame = rect;

titleLayer.alignmentMode = kCAAlignmentCenter;

titleLayer.truncationMode = kCATruncationEnd;

titleLayer.string = [self attributedTitleAtIndex:idx];

titleLayer.contentsScale = [[UIScreen mainScreen] scale];

修改成:

 UIFont *font = [self attributedFontAtIndex:idx];

 UIColor *color = [self attributedColorAtIndex:idx];

CATextLayer *titleLayer = [[CATextLayer alloc] init];

titleLayer.frame = rect;

titleLayer.alignmentMode = kCAAlignmentCenter;

titleLayer.truncationMode = kCATruncationEnd;

titleLayer.string = [self attributedTitleAtIndex:idx];

 titleLayer.fontSize = font.pointSize;

 titleLayer.font = (__bridge CFTypeRef _Nullable)(font.fontName);

titleLayer.string = (NSString *)titleString;

 titleLayer.foregroundColor = color.CGColor;

titleLayer.contentsScale = [[UIScreen mainScreen] scale];

在修改过程中并未对源码或者多余部分进行删除,修改 只是简单让title显示出来,这里只简单介绍一种思路。

相关文章

网友评论

      本文标题:HMSegmentControl (iOS10)

      本文链接:https://www.haomeiwen.com/subject/qjmfettx.html