UIFont.monospacedDigitSystemFontOfSize()不是真的等宽?

时间:2016-07-01 14:35:18

标签: ios swift fonts monospace

我想使用SF的等宽数字字体在文本字段中显示整数,方法是更改​​字体,如下所示:

textField.font = UIFont.monospacedDigitSystemFontOfSize(textField.font!.pointSize, weight: UIFontWeightSemibold)

但如果我将文本字段的文本设置为60Hz频率,则结果为:

SF monospaced

对于相同数量的数字,文本的宽度显然不是恒定的,因此它会移动所有的抖动,因为文本字段被限制为"领先"和"尾随"下面的图像。 为什么会出现这种情况以及如何解决?

另一种真正的等宽字体,如" Menlo"行为正确:

Menlo

4 个答案:

答案 0 :(得分:5)

所以似乎设置"调整以适应"文本字段的选项是覆盖字体的等宽属性(即使视图足够大以包含文本!)

此时我的临时解决方案是

  • textField.adjustsFontSizeToFitWidth设为false
  • 再次设置等宽字体(因为它以某种方式被adjustsFontSizeToFitWidth' setter覆盖)
  • 开始更改文字
  • 完成后再次设置textField.adjustsFontSizeToFitWidthtrue以便正确处理用户输入

这不是我原本想要的,但它可以作为一种解决方法

enter image description here

答案 1 :(得分:1)

我有一个项目使用" adjust to fit"选项,如果我使用didSet为标签出口设置等宽属性,它似乎适用于Xcode 8 Beta 3。

@IBOutlet weak var textLabel: UILabel! {
    didSet {
        textLabel = UIFont.monospacedDigitSystemFont(ofSize: textLabel!.pointSize, weight: UIFontWeightRegular)
    }
}

答案 2 :(得分:0)

就我而言,我将UILabel的font属性设置为等宽数字字体并使用attributedText设置文本。这在iOS 9中有效,但在iOS 10中有效。解决方法是在属性字符串中明确设置字体属性。

答案 3 :(得分:0)

我遇到了同样的问题并设置了代码。更新了Swift 4:

if (isset($_POST['title'])) {
    $query = "UPDATE articles 
      SET title = '{$_POST['title']}',
      content = '{$_POST['content']}', 
      author = '{$_POST['author']}', 
      date = '{$_POST['date']}', 
      categoryId = {$_POST['categoryId']}
    WHERE id = {$_GET['id']}
    LIMIT 1";