Objective C - 将省略号附加到居中对齐的 UILabel,但不要移动文本
Objective C - Append ellipsis to a UILabel that is centrally aligned, but don't move text
我有一个宽度接近 100% 的 UILabel。文本居中对齐。
我有一些代码要附加或以其他方式演练添加省略号。
然而,这会导致出现动画时 UILabel 移动的问题。这是因为文本居中对齐。
我希望我的代码添加或更新省略号而不是 "move" UILabel。
如果可以的话,我不想添加另一个标签,但如果这是唯一的解决方案,那就太好了。
代码如下;
// This is a method inside a custom UILabel subclass
- (void)startProgressAnimationWithInterval:(NSTimeInterval)interval
{
self.isAnimatingProgress = YES;
NSString *singleDot = @".";
NSString *doubleDot = @"..";
NSString *tripleDot = @"...";
if (![self.text hasSuffix:tripleDot]) {
self.text = [self.text stringByAppendingString:tripleDot];
}
self.progressTimer = [NSTimer vic_scheduledTimerWithTimeInterval:interval userInfo:nil action:^(NSTimer *timer, NSInteger repeatIndex) {
if ([self.text hasSuffix:tripleDot]) {
self.text = [self.text stringByReplacingOccurrencesOfString:tripleDot withString:singleDot];
}
else if ([self.text hasSuffix:doubleDot]) {
self.text = [self.text stringByReplacingOccurrencesOfString:doubleDot withString:tripleDot];
}
else {
self.text = [self.text stringByReplacingOccurrencesOfString:singleDot withString:doubleDot];
}
}];
}
有很多方法可以解决这个问题。例如,不是更改文本,而是将文本设置为包含省略号,然后只需将可变数量的椭圆点的字体颜色设置为标签 attributedText
的清晰颜色:
- (void)handleTimer:(NSTimer *)timer {
if (++self.dotsToShow >= 4) self.dotsToShow = 0; // an integer state that rotates 0, 1, 2, 3 and then repeats
NSInteger dotsToHide = 3 - self.dotsToShow;
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:self.label.text];
if (dotsToHide > 0) {
[string setAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} range:NSMakeRange(string.length - dotsToHide, dotsToHide)];
}
self.label.attributedText = string;
}
我有一个宽度接近 100% 的 UILabel。文本居中对齐。
我有一些代码要附加或以其他方式演练添加省略号。
然而,这会导致出现动画时 UILabel 移动的问题。这是因为文本居中对齐。
我希望我的代码添加或更新省略号而不是 "move" UILabel。
如果可以的话,我不想添加另一个标签,但如果这是唯一的解决方案,那就太好了。
代码如下;
// This is a method inside a custom UILabel subclass
- (void)startProgressAnimationWithInterval:(NSTimeInterval)interval
{
self.isAnimatingProgress = YES;
NSString *singleDot = @".";
NSString *doubleDot = @"..";
NSString *tripleDot = @"...";
if (![self.text hasSuffix:tripleDot]) {
self.text = [self.text stringByAppendingString:tripleDot];
}
self.progressTimer = [NSTimer vic_scheduledTimerWithTimeInterval:interval userInfo:nil action:^(NSTimer *timer, NSInteger repeatIndex) {
if ([self.text hasSuffix:tripleDot]) {
self.text = [self.text stringByReplacingOccurrencesOfString:tripleDot withString:singleDot];
}
else if ([self.text hasSuffix:doubleDot]) {
self.text = [self.text stringByReplacingOccurrencesOfString:doubleDot withString:tripleDot];
}
else {
self.text = [self.text stringByReplacingOccurrencesOfString:singleDot withString:doubleDot];
}
}];
}
有很多方法可以解决这个问题。例如,不是更改文本,而是将文本设置为包含省略号,然后只需将可变数量的椭圆点的字体颜色设置为标签 attributedText
的清晰颜色:
- (void)handleTimer:(NSTimer *)timer {
if (++self.dotsToShow >= 4) self.dotsToShow = 0; // an integer state that rotates 0, 1, 2, 3 and then repeats
NSInteger dotsToHide = 3 - self.dotsToShow;
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:self.label.text];
if (dotsToHide > 0) {
[string setAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} range:NSMakeRange(string.length - dotsToHide, dotsToHide)];
}
self.label.attributedText = string;
}