Skip to content

SimpleZero/JKRichLabel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JKRichLabel

CI Status Version License Platform

Example

文章链接

To run the example project, clone the repo, and run pod install from the Example directory first.

  • JKAlignmentExample
NSArray<NSString *> *texts = @[
 @"左上",
 @"左中",
 @"左下",
 @"中上",
 @"中中",
 @"中下",
 @"右上",
 @"右中",
 @"右下"
];

NSArray<NSNumber *> *hAlignments = @[
 @(NSTextAlignmentLeft),
 @(NSTextAlignmentLeft),
 @(NSTextAlignmentLeft),
 @(NSTextAlignmentCenter),
 @(NSTextAlignmentCenter),
 @(NSTextAlignmentCenter),
 @(NSTextAlignmentRight),
 @(NSTextAlignmentRight),
 @(NSTextAlignmentRight)
];

NSArray<NSNumber *> *vAlignments = @[
 @(JKTextVerticalAlignmentTop),
 @(JKTextVerticalAlignmentCenter),
 @(JKTextVerticalAlignmentBottom),
 @(JKTextVerticalAlignmentTop),
 @(JKTextVerticalAlignmentCenter),
 @(JKTextVerticalAlignmentBottom),
 @(JKTextVerticalAlignmentTop),
 @(JKTextVerticalAlignmentCenter),
 @(JKTextVerticalAlignmentBottom)
];

CGRect frame = CGRectZero;
for (int i = 0; i < texts.count; i++) {
 JKRichLabel *label = [[JKRichLabel alloc] init];
 if (i == 0) {
  frame = CGRectMake(0, 80, width, height);
 } else {
  UIView *v = self.view.subviews.lastObject;
  CGFloat maxY = CGRectGetMaxY(v.frame);
  frame = CGRectMake(0, maxY + 10, width, height);
}
 label.frame = frame;
 label.backgroundColor = [UIColor grayColor];
 label.text = texts[i];
 label.textAlignment = hAlignments[i].integerValue;
 label.textVerticalAlignment = vAlignments[i].integerValue;
 [self.view addSubview:label];
}
  • JKLineBreakModeExample
NSArray<NSString *> *modes = @[
 @"NSLineBreakByWordWrapping",
 @"NSLineBreakByCharWrapping",
 @"NSLineBreakByClipping",
 @"NSLineBreakByTruncatingHead",
 @"NSLineBreakByTruncatingTail",
 @"NSLineBreakByTruncatingMiddle"
];

CGRect frame = CGRectZero;
for (int i = 0; i < 6; i++) {
 JKRichLabel *one = [[JKRichLabel alloc] init];
 if (i == 0) {
 frame = CGRectMake(0, 250, width, 50);
 } else {
  UIView *v = self.view.subviews.lastObject;
 CGFloat maxY = CGRectGetMaxY(v.frame);
 frame = CGRectMake(0, maxY + 10, width, 50);
}
one.frame = frame;
one.backgroundColor = [UIColor grayColor];
one.text = [NSString stringWithFormat:@"%@\nThis is a functional test text. This is a functional test text. This is a functional test text.This is a functional test text. This is a functional test text. ", modes[i]];
one.lineBreakMode = i;
one.numberOfLines = 0;
[self.view addSubview:one];

  • JKSizeToFitExample
- (void)viewDidLoad {
 [super viewDidLoad];

 self.view.backgroundColor = [UIColor whiteColor];
 CGFloat width = CGRectGetWidth(self.view.bounds);

 JKRichLabel *tip = [[JKRichLabel alloc] init];
 tip.frame = CGRectMake(0, 80, width, 50);
 tip.textColor = [UIColor whiteColor];
 tip.backgroundColor = [UIColor redColor];
 tip.text = @"点击空白处,下方label可自适应大小";
 tip.font = [UIFont systemFontOfSize:16.f];
 [self.view addSubview:tip];

{
 JKRichLabel *one = [[JKRichLabel alloc] init];
 one.frame = CGRectMake(0, 200, width, 50);
 one.numberOfLines = 0;
 one.backgroundColor = [UIColor grayColor];
 one.text = @"To be or not to be, that's a question.";
 [self.view addSubview:one];
}

{
 UIView *lastV = self.view.subviews.lastObject;
 CGFloat maxY = CGRectGetMaxY(lastV.frame);
 JKRichLabel *one = [[JKRichLabel alloc] init];
 one.frame = CGRectMake(0, maxY + 10, width, 50);
 one.numberOfLines = 0;
 one.backgroundColor = [UIColor grayColor];
 one.text = @"To be or not to be, that's a question.\nTo be or not to be, that's a question.\nTo be or not to be, that's a question.\nTo be or not to be, that's a question.\nTo be or not to be, that's a question.\n";
 [self.view addSubview:one];
}
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
for (int i = 1; i < self.view.subviews.count; i++) {
UIView *view = self.view.subviews[i];
[view sizeToFit];
}
}

  • JKPathExample
JKRichLabel *one = [[JKRichLabel alloc] init];
one.frame = CGRectMake(20, 100, 152, 152);
one.textVerticalAlignment = JKTextVerticalAlignmentTop;
one.numberOfLines = 0;
one.textContainerPath = [UIBezierPath bezierPathWithOvalInRect:one.bounds];
one.backgroundColor = [UIColor grayColor];
one.text = @"燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们的日子为什么一去不复返呢?";
[self.view addSubview:one];
  • JKLongTextExample
NSMutableString *mutableStr = [NSMutableString new];
NSString *str = @"This is a long text test. ";
for (int i = 0; i < 199; i++) {
 [mutableStr appendString:str];
}


UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];

JKRichLabel *label = [[JKRichLabel alloc] init];
label.frame = CGRectMake(0, 0, width, 100);
label.text = mutableStr;
label.font = [UIFont systemFontOfSize:18.f];
label.numberOfLines = 0;
[label sizeToFit];

scrollView.contentSize = label.bounds.size;
[scrollView addSubview:label];

[self.view addSubview:scrollView];
  • JKHitExample
JKRichLabel *label = [[JKRichLabel alloc] init];
label.frame = CGRectMake(0, 150, width, 50);
label.backgroundColor = [UIColor grayColor];

__weak typeof(self) weakSelf = self;
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"这是一段可相应单击和长按的文字" singleTap:^(UIView * _Nonnull targetView, NSAttributedString * _Nonnull attributeString, JKTextAttachment * _Nullable attachment) {
 [weakSelf showMessage:@"单击"];
} longPress:^(UIView * _Nonnull targetView, NSAttributedString * _Nonnull attributeString, JKTextAttachment * _Nullable attachment) {
 [weakSelf showMessage:@"长按"];
}];

label.attributedText = str;
[self.view addSubview:label];
  • JKLinkExample
{
 JKRichLabel *one = [[JKRichLabel alloc] init];
 one.frame = CGRectMake(0, 200, width, 50);
 one.backgroundColor = [UIColor greenColor];
 NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"http://www.jianshu.com/u/02a488e1e71e"];
 [str setDefaultLink];
 one.attributedText = str;
 [self.view addSubview:one];
}

{
 UIView *v = self.view.subviews.lastObject;
 CGFloat maxY = CGRectGetMaxY(v.frame);
 JKRichLabel *one = [[JKRichLabel alloc] init];
 one.frame = CGRectMake(0, maxY + 10, width, 50);
 one.backgroundColor = [UIColor grayColor];
 __weak typeof(self) weakSelf = self;
 NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"自定义方法" singleTap:^(UIView * _Nonnull targetView, NSAttributedString * _Nonnull attributeString, JKTextAttachment * _Nullable attachment) {
  [weakSelf showMessage:attributeString.string];
 }];
 [str setDefaultLinkColor];
 one.attributedText = str;
 [self.view addSubview:one];
}
  • JKHighlightExample

JKRichLabel *one = [[JKRichLabel alloc] init];
one.frame = CGRectMake(0, 80, width, 50);
one.backgroundColor = [UIColor yellowColor];
one.textAlignment = NSTextAlignmentCenter;
NSMutableAttributedString *oneStr = [[NSMutableAttributedString alloc] initWithString:@"one"];

JKTextBorder *oneBorder = [JKTextBorder defaultBorder];
JKTextHighlight *oneHighlight = [JKTextHighlight new];
oneHighlight.textColor = [UIColor grayColor];
oneHighlight.innerColor = [UIColor blackColor];
oneHighlight.borderColor = oneHighlight.textColor;

oneStr.border = oneBorder;
oneStr.highlight = oneHighlight;

one.attributedText = oneStr;
[self.view addSubview:one];


JKRichLabel *two = [[JKRichLabel alloc] init];
two.frame = CGRectMake(0, 180, width, 50);
two.backgroundColor = [UIColor yellowColor];
two.textAlignment = NSTextAlignmentCenter;
NSMutableAttributedString *twoStr = [[NSMutableAttributedString alloc] initWithString:@"two"];

JKTextBorder *twoBorder = [JKTextBorder defaultBorder];
twoBorder.innerColor = [UIColor grayColor];
JKTextHighlight *twoHighlight = [JKTextHighlight new];
twoHighlight.textColor = [UIColor grayColor];
twoHighlight.innerColor = [UIColor blackColor];
twoHighlight.borderColor = twoHighlight.textColor;

twoStr.border = twoBorder;
twoStr.highlight = twoHighlight;

two.attributedText = twoStr;
[self.view addSubview:two];

  • JKWPSExample

JKRichLabel *label = [[JKRichLabel alloc] init];
label.frame = CGRectMake(10, 100, width - 20, 350);
label.backgroundColor = [UIColor grayColor];

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"Hello World\n\n"];
[str jk_setFont:[UIFont systemFontOfSize:30]];
[str jk_setTextColor:[UIColor blueColor]];

CGSize size = CGSizeMake(50, 50);

{
 [str appendString:@"这是一张图片\t"];

 UIImage *img = [UIImage imageNamed:@"JK"];
 JKTextAttachment *attachment = [JKTextAttachment attachmentWithContent:img contentSize:size alignToFont:nil];
 [str appendAttachment:attachment];
 [str appendString:@"\n"];
}

{
 [str appendString:@"这是一个layer\t"];

 CALayer *layer = [CALayer layer];
 layer.backgroundColor = [UIColor purpleColor].CGColor;
 JKTextAttachment *attachment = [JKTextAttachment attachmentWithContent:layer contentSize:size alignToFont:nil];
 [str appendAttachment:attachment];
 [str appendString:@"\n"];
}

{
 [str appendString:@"这是一个view\t"];

 UIView *view = [UIView new];
 view.backgroundColor = [UIColor orangeColor];
 JKTextAttachment *attachment = [JKTextAttachment attachmentWithContent:view contentSize:size alignToFont:nil];
 [str appendAttachment:attachment];
}

label.attributedText = str;
label.numberOfLines = 0;
label.lineSpacing = 10;

[self.view addSubview:label];
  • JKOtherExample

//    introduction
{
 JKRichLabel *one = [[JKRichLabel alloc] init];
 one.frame = CGRectMake(0, 80, width, 130);
 one.backgroundColor = [UIColor grayColor];
 one.textVerticalAlignment = JKTextVerticalAlignmentTop;
 one.numberOfLines = 0;
 one.text = @"default attributes introduction\n\ncharacterSpacing : 0.5f\nlineSpacing : 1.5f\nnumberOfLines : 1\ntextAlignment : NSTextAlignmentNatural\ntextVerticalAlignment : JKTextVerticalAlignmentCenter";
 [self.view addSubview:one];
}

//    insets
{
 JKRichLabel *one = [[JKRichLabel alloc] init];
 CGFloat maxY = CGRectGetMaxY(self.view.subviews.lastObject.frame);
 one.frame = CGRectMake(0, maxY + 10, width, 50);
 one.backgroundColor = [UIColor grayColor];
 one.textVerticalAlignment = JKTextVerticalAlignmentTop;
 one.numberOfLines = 0;
 one.textInsets = UIEdgeInsetsMake(8, 10, 0, 10);
 one.text = @"one.textInsets = UIEdgeInsetsMake(8, 10, 0, 10);";
 [self.view addSubview:one];
}
//    characterSpacing
{
 JKRichLabel *one = [[JKRichLabel alloc] init];
 CGFloat maxY = CGRectGetMaxY(self.view.subviews.lastObject.frame);
 one.frame = CGRectMake(0, maxY + 10, width, 20);
 one.backgroundColor = [UIColor grayColor];
 one.numberOfLines = 0;
 one.characterSpacing = 5;
 one.text = @"one.characterSpacing = 5;";
 [self.view addSubview:one];
}
//    lineSpacing
{
 JKRichLabel *one = [[JKRichLabel alloc] init];
 CGFloat maxY = CGRectGetMaxY(self.view.subviews.lastObject.frame);
 one.frame = CGRectMake(0, maxY + 10, width, 40);
 one.backgroundColor = [UIColor grayColor];
 one.numberOfLines = 0;
 one.lineSpacing = 5;
 one.text = @"one.lineSpacing = 5;\none.lineSpacing = 5;";
 [self.view addSubview:one];
}

Requirements

Installation

JKRichLabel is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'JKRichLabel'

Author

SimpleZero, [email protected]

License

JKRichLabel is available under the MIT license. See the LICENSE file for more info.

About

use core text to display rich text

Resources

License

Stars

Watchers

Forks

Packages

No packages published