You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS:San Francisco字体下十六进制字符对齐问题解决方案求助

解决SF字体下十六进制标签对齐问题

嘿,这个问题我之前也碰到过——喜欢San Francisco字体的清爽感,但十六进制字符对齐确实头疼!给你几个实际用过的靠谱方案,比拆成一堆小标签省心多了:

  • 用San Francisco的等宽变体:SF Mono
    其实苹果自家就给SF家族配了等宽版本,就是SF Mono,它和常规SF字体视觉风格高度统一,不会像Menlo那样显得突兀。在iOS里你可以直接用UIFont.monospacedSystemFont(ofSize: 17, weight: .regular)来创建字体,这样不管是数字0-9还是字母A-F,每个字符的宽度都是一致的,直接把标签文本丢进去就能整齐对齐,完全不用额外调整布局。

  • 给常规SF字体强制开启全字符等宽(进阶)
    如果你实在不想切换到SF Mono,还有个小技巧:通过UIFontDescriptor修改字体特性,强制让所有字符(包括字母)都使用等宽布局。代码示例如下:

    let descriptor = UIFont.systemFont(ofSize: 17, weight: .regular).fontDescriptor
        .addingAttributes([
            UIFontDescriptor.FeatureSettingsAttribute: [
                [
                    UIFontDescriptor.FeatureTypeIdentifierKey: kNumberSpacingType,
                    UIFontDescriptor.FeatureSelectorIdentifierKey: kMonospacedNumbersSelector
                ],
                [
                    UIFontDescriptor.FeatureTypeIdentifierKey: kCharacterSpacingType,
                    UIFontDescriptor.FeatureSelectorIdentifierKey: kMonospacedSelector
                ]
            ]
        ])
    let monospacedSF = UIFont(descriptor: descriptor, size: 17)
    

    不过这个方法在部分iOS版本上可能存在兼容性问题,不如直接用SF Mono稳妥。

  • 优化拆分小标签的方案(如果一定要拆)
    要是你还是倾向于拆成独立元素,不用每个字符都拆,建议按两位十六进制组来拆分(比如F0、1A这种单元),给每个组的标签设置固定宽度约束,同时搭配SF的等宽数字字体。这样每个组的宽度一致,视觉上能对齐,而且比拆单个字符少很多布局控件,维护起来更轻松。

内容的提问来源于stack exchange,提问作者Travis Griggs

火山引擎 最新活动