我正在为UIButton创建子类,为应用程序设置一些默认值,但由于某些原因我无法更改字体大小。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// id button, set defaults
[self setTintColor:[UIColor blueColor]];
[self.titleLabel setFont:[UIFont systemFontOfSize:40.0]];
[self.layer setBorderWidth:1.0f];
[self.layer setBorderColor:[[UIColor blackColor] CGColor]];
}
return self;
}
我可以改变颜色和其他属性,但不是fontize,它没有效果吗?
idButton *LButton = [idButton buttonWithType:UIButtonTypeRoundedRect];
[LButton setTitle:@"Login" forState:UIControlStateNormal];
LButton.frame = CGRectMake(0, buttonY+(buttonHeight/2), screenWidth, buttonHeight);
[self addSubview:LButton];
答案 0 :(得分:2)
您的代码存在的问题是UIButton的方法setTitle:forState:
会将字体重置为默认值。
一种解决方案是覆盖此方法以使用NSAttributedString。这也允许您设置其他属性:
- (void) setTitle:(NSString *)customTitle forState:(UIControlState)state {
if (customTitle) {
NSMutableAttributedString *mas = [[NSMutableAttributedString alloc] initWithString:customTitle];
NSRange range = NSMakeRange(0, [customTitle length]);
[mas addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:40.0]
range:range];
[mas addAttribute:NSKernAttributeName
value:@(1.1)
range:range];
[self setAttributedTitle:mas forState:state];
} else {
[super setTitle:customTitle forState:state];
}
}
答案 1 :(得分:0)
您使用的是xib还是故事板。
如果是,则initWithFrame:
不会被调用
尝试awakeFromNib
或initWithCoder:
答案 2 :(得分:0)
+[UIButton buttonWithType]
见the documentation。
buttonWithType:
不会返回UIButton
子类的实例(例如您的LButton
)。
如果您使用initWithFrame
方法设置字体,则应改为呼叫[[LButton alloc] initWithFrame:]
:
idButton *LButton = [[LButton alloc] initWithFrame:frame];
答案 3 :(得分:0)
我解释了如何执行此操作,inside this post.您正在寻找self.titleLabel.font.pointSize
。您也可以使用UILabel
扩展程序执行此操作,但必须使用self.font.pointSize
。
如果您必须支持多种语言,还可以使用其他方法检查语言代码,并根据此更改UIFont
。
您只需要在UIFont
内设置awakeFromNib
:
[self.titleLabel setFont:
[UIFont fontWithName:kFont size:self.titleLabel.font.pointSize]];
获取特定字体。
- (UIFont *)whichFontShouldBeUsed{
UIFont *fontToUse = [UIFont fontWithName:kFontBold
size:self.titleLabel.font.pointSize];
if( [_language isEqualToString:@"tr"] &&
[_language isEqualToString:@"pl"] ){
fontToUse = [UIFont fontWithName:FOO
size:self.titleLabel.font.pointSize];
}
return fontToUse;
}