从WP转IOS了,还是放不下...... 在项目中,要实现如图多个不同大小的文字 底部对齐的效果 像下面这样:(想要的效果)以为用三个UIFont不同的UILabel 之后让他们底部对齐就可以了,但是效果是下面这样的: (不想要的效果)底部完全不对齐 ...
从WP转IOS了,还是放不下......
在项目中,要实现如图多个不同大小的文字 底部对齐的效果 像下面这样:
(想要的效果)
以为用三个UIFont不同的UILabel 之后让他们底部对齐就可以了,但是效果是下面这样的:
(不想要的效果)
底部完全不对齐呀,为什么"1314"比两边高出了那么多呀!!!!强迫症不能忍呀!!!
--------------------------------------------------------------------------------
对比:
1.在Windows Phone中 控件是相对布局
Windows Phone里面TextBlock需要设置一个固定的 宽度 和 高度 (至少我是这样做的)
TextBlock不但可以将文字设置为水平居中、偏左、偏右,还可以通过属性
text.VerticalContentAlignment=Top/Center/Bottom将文字置于顶部/居中/底部。
2.在IOS中 控件是绝对布局: 对于一个控件 需要设置它的frame(包括起始位置、高和宽)
可以通过以下方法直接获取一个字符串的自适应的高度和宽度:(这点觉得比WindowsPhone好)
CGSize labelSize = [@"1314" sizeWithAttributes:@{NSFontAttributeName:kLabelFont}];
而原生的UIlabel只能设置textAlignment文字的水平偏移属性,而无法直接更改竖直方向的偏移。
WindowsPhone中要实现上面的效果,只需将三个TextBlock置底,TextBlock内容居下,即可对齐。
(这一点我突然的不确定了,好像很多时候我都是直接设置margin来手动对齐的,有空回WindowsPhone看看再修改。)
弯路:
所以在IOS处理这个问题的时候,我想着既然三个控件的底部都是对齐了的,只是高度不一样,能否仿照着WindowsPhone那样,
将较高UILabel的内容("1314")竖直偏移到最底下呢?
经过查阅 UILabel找到了这些:
不能直接调用 只能通过继承来重写
// override points. can adjust rect before calling super. (在调用父类前 可以调整文本内容的位置TextRect)
// label has default content mode of UIViewContentModeRedraw
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines; //重写来重绘文字区域
- (void)drawTextInRect:(CGRect)rect; //重写来重绘文本 重写时调用super可以按默认图形属性绘制
所以为了改变text的位置, 我们只需要改变textRectForBounds的返回值rect,并且根据这个rect重绘文本就可以了
1、关于contentMode,该模式为视图提供了多种模式用以适用框架矩形。如果对除UIVewContentModeRedraw之外的模式(如UIViewContentModeScaleToFill)都不满足需求,或者说有特定需要自定义绘制视图,可以设置为此值。那么将在视图适应框架矩形变化时缺省自动调用setNeedsDispllay或setNeedsDisplayInRect:,从而重绘视图。
原标题:【IOS】将字体大小不同的文字底部对齐
关键词:IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。