使用 drawInRect:withAttributes 对齐文本:
Posted
技术标签:
【中文标题】使用 drawInRect:withAttributes 对齐文本:【英文标题】:align text using drawInRect:withAttributes: 【发布时间】:2013-09-22 19:59:53 【问题描述】:在我的应用程序的 ios 5 版本中:
[self.text drawInRect: stringRect
withFont: [UIFont fontWithName: @"Courier" size: kCellFontSize]
lineBreakMode: NSLineBreakByTruncatingTail
alignment: NSTextAlignmentRight];
我正在升级 iOS 7。不推荐使用上述方法。我现在使用 drawInRect:withAttributes:。 attributes 参数是一个 NSDictionary 对象。我可以使用 drawInRect:withAttributes: 来为前一个 font 参数工作:
UIFont *font = [UIFont fontWithName: @"Courier" size: kCellFontSize];
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys: font, NSFontAttributeName,
nil];
[self.text drawInRect: stringRect
withAttributes: dictionary];
我要向 dictionary 添加哪些键值对来获得 NSLineBreakByTruncatingTail 和 NSTextAlignmentRight?
【问题讨论】:
【参考方案1】:一键设置文本的段落样式(包括换行模式、文本对齐方式等)。
来自docs:
NSParagraphStyleAttributeName
该属性的值是一个
NSParagraphStyle
对象。使用此属性可将多个属性应用于一系列文本。如果不指定此属性,则字符串使用默认段落属性,由NSParagraphStyle
的defaultParagraphStyle
方法返回。
所以,您可以尝试以下方法:
UIFont *font = [UIFont fontWithName:@"Courier" size:kCellFontSize];
/// Make a copy of the default paragraph style
NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
/// Set line break mode
paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
/// Set text alignment
paragraphStyle.alignment = NSTextAlignmentRight;
NSDictionary *attributes = @ NSFontAttributeName: font,
NSParagraphStyleAttributeName: paragraphStyle ;
[text drawInRect:rect withAttributes:attributes];
【讨论】:
你是怎么找到这个的? +1 虽然我想不出更短的变化 - 这确实有效,但似乎只是为了添加一些理由! 如何使字符串多行?【参考方案2】:代码是这样的:
CGRect textRect = CGRectMake(x, y, length-x, maxFontSize);
UIFont *font = [UIFont fontWithName:@"Courier" size:maxFontSize];
NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
paragraphStyle.alignment = NSTextAlignmentRight;
NSDictionary *attributes = @ NSFontAttributeName: font,
NSParagraphStyleAttributeName: paragraphStyle,
NSForegroundColorAttributeName: [UIColor whiteColor];
[text drawInRect:textRect withAttributes:attributes];
【讨论】:
以上是关于使用 drawInRect:withAttributes 对齐文本:的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)