1

我目前正在继承 UILabel 以将字体更改为自定义字体,但是我也希望它保留我在情节提要中为每个标签设置的大小。有没有一种方法可以做到这一点,还可以检测当前选择的粗体样式等,并在可能的情况下用相关的自定义字体替换它?

这是我用来设置当前字体的代码。

- (id)initWithCoder:(NSCoder *)coder {
 self = [super initWithCoder:coder];
 if (self) {
    self.font = [UIFont fontWithName:@"FrutigerLT-Roman" size:17.0];
  }
  return self;
}
4

2 回答 2

3

要为您的应用添加自定义字体,请查看以下链接:http ://shang-liang.com/blog/custom-fonts-in-ios4/

现在,为了保持故事板中设置的大小,应该没问题:

self.font = [UIFont fontWithName:@"FrutigerLT-Roman" size:self.font.pointSize];
于 2012-09-05T12:04:17.253 回答
0

最后我写了自己的解决方案。

https://stackoverflow.com/a/12281017/1565615 @Nathan R. 帮助我获得了字体大小。

然后,我提取了 UIFont 描述的字体粗细组件并相应地更改了字体,这对于自定义字体非常有用,因为现在我可以在情节提要中设置字体大小和样式,它将在 UILabel 的子类版本中进行设置。

我希望有一种更简单的方法来识别正在使用的字体粗细类型,例如 font.fontWeight 我意识到我的解决方案是冗长的,但它可以工作,任何进一步的想法都会很有用。

- (id)initWithCoder:(NSCoder *)coder
{
  self = [super initWithCoder:coder];
  if (self)
  {
    NSString *fontInfo = self.font.description;//Complete font description
    NSArray *splitUpFontDescription = [fontInfo componentsSeparatedByString: @";"];//Split up
    NSString *fontWeight = [[NSString alloc]init];
    for (NSString *tempString in splitUpFontDescription)
    {
      if ([tempString rangeOfString:@"font-weight"].location != NSNotFound)//Font weight found
      {
        fontWeight = [tempString stringByReplacingOccurrencesOfString:@" "
                                                  withString:@""];//Remove whitespace
        fontWeight = [fontWeight stringByReplacingOccurrencesOfString:@"font-weight:"
                                                           withString:@""];
      }
    }
    NSLog(@"Font style (Weight) = *%@*",fontWeight);
    if ([fontWeight isEqualToString:@"normal"])
    {
      //Set to custom font normal.
      self.font = [UIFont fontWithName:@"FrutigerLT-Roman" size:self.font.pointSize];
    }
    else if([fontWeight isEqualToString:@"bold"])
    {
      //Set to custom font bold.
      self.font = [UIFont fontWithName:@"FrutigerLT-Bold" size:self.font.pointSize];
    }
  }
  return self;
}
于 2012-09-05T14:02:10.397 回答