在iOS7中更改UITextView的字体无效

8
我有一个带有文本的UITextView,该视图位于UITableViewCell中。我注意到在iOS7上字体与iOS6不太一样,因为它设置为“系统”,所以我决定指定确切的字体/大小。
看起来没有任何变化,所以我想进行更好的测试(大字体在任何地方都没有使用),就像这样在我的“CellForRowAt....”中:
cell.newsItemDescription.font = [UIFont fontWithName:@"didot" size:20];
cell.newsItemDescription.text = newsDescriptions[indexPath.row];

在iOS6中,它的显示效果如下: iOS6截图 在iOS7中,它的显示效果如下: 输入图像描述 应用程序中只有少数几个地方会出现这种情况,但非常令人烦恼,无法弄清原因。我快要到使用整个应用程序的iOS7字体/大小的程度了。
一些额外的信息: UITextView根据单元格调整大小(使用springs/struts,即没有自动布局)和HeightForRow...
字体最初是在Storyboard中设置的(作为系统字体)。
这在设备和模拟器上都是一样的。

1
iOS 7中是否有“didot”字体可用? - liamnichols
要明确一点,我想使用Helvetica字体,我选择这个字体只是作为示例(因为它与其他字体不同)。我刚刚尝试了Helvetica 20,但没有改变。 - Recycled Steel
5个回答

32

我在 iOS 7 中遇到了奇怪的问题。如果我在 xib 文件中设置字体大小,那么实际显示的字体会比我预期的要小。

但如果我先设置文本内容再设置字体,就能得到正确的显示效果。如果不按照这个顺序,字体就会变小。

请尝试以下方法:

  cell.newsItemDescription.text = newsDescriptions[indexPath.row];
  cell.newsItemDescription.font = [UIFont fontWithName:@"didot" size:20];

好的,那个有效了!!!现在得改一下代码,我想应该不难。奇怪它会这样做,并且它不理会 Story Board。干得好。 - Recycled Steel
1
你可能还需要在Storyboard中设置editable属性。https://dev59.com/gWIk5IYBdhLWcg3wn_VF - qix
或者通过selectable属性来解决这个问题 https://dev59.com/t2Ik5IYBdhLWcg3wr_9o - Kaolin Fire
iOS 9.1,这个问题仍然存在!谢谢! - Kedar Paranjape

6

今天我也遇到了UITextView的同样问题,当我看到AlKozin的回答时,我想起了一些事情:不知何时,在某个地方我读到过,自从iOS 7以来,设置字体样式的最佳实践是在View加载完成后设置。换句话说,如果我在viewDidLoad:中设置所有东西,什么都不会发生。你必须在viewWillAppear:中设置UITextView的字体,像这样:

-(void)viewWillAppear:(BOOL)animated
{
     self.myTextView.font = [UIFont fontWithName:@"Baskerville-Italic" size:18.0];
}

使用iOS 8 sdk,这是唯一对我有效的解决方案。 - Jeremie Weldin

3
我遇到了一个奇怪的错误(Xcode 7.2.1),在IB中取消“可选”会导致UITextView不遵循通过IB指定的字体设置。

Reference Image


3

我曾经也面临过同样的问题。

从storyboard中将UITextview设置为“可选择”即可解决问题。


你能给一个代码示例来说明如何做到这一点吗?所给的建议似乎与被接受的答案不同,可能对于新手开发者有参考价值。 - gabe3886
@ gabe3886,我只是从Storyboard中更改了它,没有其他更改。 - Neeraj Joshi

0

在iOS 7上,设置textview.font对我来说很好用,但是在iOS 8上,这些答案或其他类似的SO页面上的答案都对我没用。唯一让我成功的方法是使用NSAttributedString。

NSMutableParagraphStyle *pStyle = [[NSMutableParagraphStyle alloc] init];
[pStyle setAlignment:NSTextAlignmentCenter];
tv.attributedText = [[NSAttributedString alloc]
                     initWithString:text
                         attributes:@{ NSForegroundColorAttributeName: color,
                                       NSFontAttributeName: [UIFont systemFontOfSize:fontSize],
                                       NSParagraphStyleAttributeName: pStyle,
                                     } ];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接