Objective-C 如何让非等宽的数字和空格对齐
在printf中,我们可以通过格式字符串来对文字进行对齐输出,比如:
printf("%5d\n%5d", 12, 345);
在使用等宽字体的Console中,我们可以看到数字右对齐很完美,但是,上述方法一旦应用到用到了非等宽字体的环境里就没这么好看了。
如下所示,想要让这六个属性对齐输出:

因为数字的宽度和空格不一样,所以就会看到下面的文字向前有个缩进。
这里,我们用的格式是:
@"攻击: %-6d特攻: %-6d\n防御: %-6d特防: %-6d\n速度: %-6d生命: %-6d"
那么用制表符 \t 可不可以呢?答案是否定的。

因为制表符是把定位符补足到一定倍数的宽度,如果两个字符串的长度差超过了这个单位,就会差一个制表符的宽度了。
那么,我们手动控制制表符的插入可以么?
可以,但是如果字符串长度变化比较大,就要做多重判断。

_propertyLabel.text = [NSString stringWithFormat:@"攻击: %d\t%c特攻: %d\n防御: %d\t%c特防: %d\n速度: %d\t%c生命: %d",
pet.property.attack,
pet.property.attack > 99 ? 0 : '\t',
pet.property.special_attack,
pet.property.defence,
pet.property.defence > 99 ? 0 : '\t',
pet.property.special_defence,
pet.property.speed,
pet.property.speed > 99 ? 0 : '\t',
pet.property.hp];
那么,还有没有别的办法呢?我们希望让上面的制表符的数量参数化,使得输出方法更通用。参考 printf 的文档,可以发现一种比较少见的宽度控制修饰符:*
这个修饰符的作用,是把%6d中的参数化。通过实验可以发现空格的宽度大概是数字的1半宽度,因此我们只要补足空格的宽度就行了。经过测试,使用如下配置最佳:
_propertyLabel.text = [NSString stringWithFormat:@"攻击: %-*d特攻: %d\n防御: %-*d特防: %d\n速度: %-*d生命: %d",
12 - (int)log10(pet.property.attack),
pet.property.attack,
pet.property.special_attack,
12 - (int)log10(pet.property.defence),
pet.property.defence,
pet.property.special_defence,
12 - (int)log10(pet.property.speed),
pet.property.speed,
pet.property.hp];

Objective-C 如何让非等宽的数字和空格对齐的更多相关文章
- js 图片压缩上传(纯js的质量压缩,非长宽压缩)
下面是大神整理的demo,很实用,这里存一下备用,感谢大神! 此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下 <!DOCTYPE ht ...
- 前端图片压缩上传(纯js的质量压缩,非长宽压缩)
此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下: <!DOCTYPE html> <html> <head&g ...
- 关于js计算非等宽字体宽度的方法
准备一个容器 首先在body外插入一个absolute的容器避免重绘: const svgWidthTestContainer = document.createElement('svg'); svg ...
- 【微信小程序】图片压缩-纯质量压缩,非长宽裁剪压缩
原理:利用canvas来实现,将图片绘制到canvas上,然后canvas转图片时,微信提供的一个方法wx.canvasToTempFilePath(Object object, Object t ...
- sourceinsight tab 空格 对齐 等宽字体
参考:http://bbs.chinaunix.net/thread-587409-1-1.html 1. SMART TAB的用法. 解决自动缩进. 新开一个PROJECT后,点Options-&g ...
- ARTS-S python把非汉语和非字母的字符替换成空格
# coding: utf-8 import re text = "aa[bb,aa#cWc中a国" FILTER_PUNTS = re.compile("[^\u4E0 ...
- HNUSTOJ-1690 千纸鹤
1690: 千纸鹤 时间限制: 1 Sec 内存限制: 128 MB提交: 992 解决: 296[提交][状态][讨论版] 题目描述 圣诞节快到了,校园里到处弥漫着粉红色的气息.又是一个情侣秀 ...
- eclipse 中使用等宽字体 inconsolata
一直以来,就感觉使用 eclipse 时的那几种字体很难看,而且非等宽,空格宽度很小,排版很乱. 搜索并试用了一下,发现了字体inconsolata. 这是一个很适合编程的字体,效果如下: 非常漂亮. ...
- vs2010等宽字体设置
VS2010自带的字体非等宽,不同行的代码采用同样的缩进空格时,可能左侧未对齐. 这个里有一款字体很帮,字体名字叫Fixedsys Excelsior 3.01,下载地址:http://www.fix ...
随机推荐
- Oracle 之 保留两位小数
项目需要使用百分率,保留2位小数,只用 round 和 trunc 函数都可以实现(round(_data,2) ),只是格式不是很工整,对格式要求不严谨的情况下使用 round 即可. 以下是比较方 ...
- JavaWeb之tomcat安装、配置与使用(一)
一.Tomcat下载与安装: 1.直接到官网下载Tomcat安装程序包:http://tomcat.apache.org/ 2.下载下来后是个压缩包,如:apache-tomcat-7.0.40.zi ...
- Go语言中使用MySql数据库
Go语言中使用MySql数据库 1.MySQL驱动 Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常用的有如下几种: http ...
- MapReduce三种路径输入
目前为止知道MapReduce有三种路径输入方式.1.第一种是通过一下方式输入: FileInputFormat.addInputPath(job, new Path(args[0]));FileIn ...
- SSM实战——秒杀系统之Web层Restful url设计、SpringMVC整合、页面设计
一:Spring整合SpringMVC 1:编写web.xml,配置DispatcherServlet <web-app xmlns="http://java.sun.com/xml/ ...
- Python locale error: unsupported locale setting
pip don't install package. Python locale error: unsupported locale setting .. >>> import lo ...
- 〖Linux〗将Jar文件打包成Linux可执行文件
因为不想敲写 java -jar jarfile,而是想直接敲写 ./jarfile 就能够跑起程序 #!/bin/bash - #================================= ...
- ViewPager实现无限循环
引言 这两天在项目里实用到ViewPager来做广告运营位展示.看到如今非常多APP的广告运营位都是无限循环的,所以就研究了一下这个功能的实现. 先看看效果 从一个方向上一直滑动.么有滑到尽头的感觉. ...
- POJ1013 称硬币
题目链接:http://poj.org/problem?id=1013 题目大意 有12枚硬币.其中有11枚真币和1枚假币.假币和真币重量不同,但不知道假币比真币轻还是重.现在,用一架天平称了这些币三 ...
- 转:OGRE 源码编译方法
编译及运行环境:Windows 7 . vs2010. 编译前的准备: 1.想编译OGRE,最起码要有OGRE的源码吧.可以去官方网站下载最新的源码包,我这里用的是1.7.2版本的,下载下来的文件叫 ...