我创建了UILabel子类,它是IB_DESIGNABLE并且具有很少的IBInspectable属性。
我可以在所有iPhone模拟器和界面构建器中看到属性文本。
我可以看到运行iOS 9.3的iPhone 5c中的文字。
但也没有为同样运行iOS 9.3的iPhone 6系列设备显示文字。
要调试我将背景颜色设置为自定义标签,我可以看到标签框用给定的颜色填充但不显示文字。
我甚至尝试评论 applyStlyeOnText:方法,但即便如此,iPhone 6上也没有显示任何文字。
我使用自定义字体,正确添加字体文件。
更新:刚刚更新到Xcode 8.0,在iOS 10模拟器上,MyLabel什么也没显示。
以下是实施:
标题文件:
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface MyLabel : UILabel
@property (nonatomic) IBInspectable CGFloat letterSpacing;
@property (nonatomic) IBInspectable CGFloat lineSpacing;
@end
实施档案:
#import "MyLabel.h"
@implementation MyLabel
-(void)setLetterSpacing:(CGFloat)letterSpacing
{
if (_letterSpacing != letterSpacing) {
_letterSpacing = letterSpacing;
[self applyStlyeOnText:self.text];
}
}
-(void)setLineSpacing:(CGFloat)lineSpacing
{
if (_lineSpacing != lineSpacing) {
_lineSpacing = lineSpacing;
[self applyStlyeOnText:self.text];
}
}
-(void)applyStlyeOnText:(NSString *)text
{
if (text.length){
NSMutableDictionary * attributes = [NSMutableDictionary new];
if (self.lineSpacing > 0)
{
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.paragraphSpacing = self.lineSpacing;
paragraphStyle.lineBreakMode = self.lineBreakMode;
paragraphStyle.alignment = self.textAlignment;
[attributes setObject:paragraphStyle forKey:NSParagraphStyleAttributeName];
}
if (self.letterSpacing > 0) {
[attributes setObject:[NSNumber numberWithFloat:self.letterSpacing] forKey:NSKernAttributeName];
}
[attributes setObject:self.font forKey:NSFontAttributeName];
[attributes setObject:self.textColor forKey:NSForegroundColorAttributeName];
[attributes setObject:[UIColor greenColor] forKey:NSBackgroundColorAttributeName];
self.attributedText = [[NSAttributedString alloc] initWithString:text attributes:attributes];
NSLog(@"MyLabel - Stlye applied on text : %@", text);
NSLog(@"Thread : %@", [NSThread currentThread]);
[self setBackgroundColor:[UIColor yellowColor]];
}
else
{
//no text recived to apply style on.
self.attributedText = nil;
NSLog(@"MyLabel - Stlye applied on text : empty string received");
}
}
-(void)setText:(NSString *)text
{
[super setText:text];
NSLog(@"MyLabel - set text called with text : %@", text);
NSLog(@"Thread : %@", [NSThread currentThread]);
if (self.lineSpacing > 0 || self.letterSpacing > 0)
{
[self applyStlyeOnText:text];
}
}
}
答案 0 :(得分:1)
要进行调试,我创建了一个新的单一视图应用程序,并将MyLabel.h和MyLabel.m文件添加到项目中。
我使用的是Xcode 8和iPhone 5S模拟器。
但结果是相同的,MyLabel没有显示任何文字。
感到沮丧,删除了 MyLabel.h 和 MyLabel.m 中的所有代码,但 MyLabel.h 中的属性除外,整体课程看起来像下面:
标题文件:
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface MyLabel : UILabel
@property (nonatomic) IBInspectable CGFloat letterSpacing;
@property (nonatomic) IBInspectable CGFloat lineSpacing;
@end
实施档案:
#import "MyLabel.h"
@implementation MyLabel
@end
即使使用上述代码,MyLabel
也未显示任何文字。
现在我决定重命名以下属性:
@property (nonatomic) IBInspectable CGFloat ltrSpacing;
@property (nonatomic) IBInspectable CGFloat lnSpacing;
令人惊讶MyLabel
开始显示文字,很奇怪。
然后我重新介绍了我的逻辑,一切正常。
我认为我选择的属性名称与UILabel
的某些私有属性存在冲突,但我不确定其确切原因。