iOS / Objecitve-C UILabel文字字距 [英] iOS/Objecitve-C UILabel text kerning
问题描述
我正在寻找如何增加 UILabel
中的字符间距,以使我的UI设计实现更具吸引力。我找到了以下
但是它似乎并没有在UI上生效当应用程序正在运行,并在界面生成器的文本消失。
请有人帮助我,并指出我做错了什么。
感谢高级!
您想更新每次更正字距时,
所以,你的.h应该看起来像:
IB_DESIGNABLE
@interface KerningLabel:UILabel
@property(非原子)IBInspectable CGFloat字距调整;
@end
和您的.m:
@implementation KerningLabel
- (void)setKerning:(CGFloat)kerning
{
_kerning =字距;
if(self.attributedText)
{
NSMutableAttributedString * attribString = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];
[attribString addAttribute:NSKernAttributeName value:@(kerning)range:NSMakeRange(0,self.attributedText.length)];
self.attributedText = attribString;
}
}
@end
I was in search of how to increase character spacing in UILabel
s to make more attractive my UI Design implementations for the Apps I do. And I found following answer, which tells it allows to adjust the Text Kerning, and it's written in Swift.
But what I needed is an Objective-C Solution. So I tried to convert the following code snippet:
import UIKit
@IBDesignable
class KerningLabel: UILabel {
@IBInspectable var kerning:CGFloat = 0.0{
didSet{
if ((self.attributedText?.length) != nil)
{
let attribString = NSMutableAttributedString(attributedString: self.attributedText!)
attribString.addAttributes([NSKernAttributeName:kerning], range:NSMakeRange(0, self.attributedText!.length))
self.attributedText = attribString
}
}
}
}
to following in Objective-C:
KerningLabel.h:
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface KerningLabel : UILabel
@property (nonatomic) IBInspectable CGFloat kerning;
@end
KerningLabel.m:
#import "KerningLabel.h"
@implementation KerningLabel
@synthesize kerning;
- (void) setAttributedText:(NSAttributedString *)attributedText {
if ([self.attributedText length] > 0) {
NSMutableAttributedString *muAttrString = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];
[muAttrString addAttribute:NSKernAttributeName value:@(self.kerning) range:NSMakeRange(0, [self.attributedText length])];
self.attributedText = muAttrString;
}
}
@end
And it gives the following Attribute in XCode IB to adjust the Kerning,
But it really doesn't seems to be taking effect on the UI when the App is running and also in the Interface Builder the text goes disappearing.
Please somebody help me and point out what I have done wrong.
Thanks in Advanced!
You want to update your attributedText
every time kerning is updated. So, your .h should look like:
IB_DESIGNABLE
@interface KerningLabel : UILabel
@property (nonatomic) IBInspectable CGFloat kerning;
@end
and your .m :
@implementation KerningLabel
- (void)setKerning:(CGFloat)kerning
{
_kerning = kerning;
if(self.attributedText)
{
NSMutableAttributedString *attribString = [[NSMutableAttributedString alloc]initWithAttributedString:self.attributedText];
[attribString addAttribute:NSKernAttributeName value:@(kerning) range:NSMakeRange(0, self.attributedText.length)];
self.attributedText = attribString;
}
}
@end
这篇关于iOS / Objecitve-C UILabel文字字距的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!