返回文本繪製所佔據的矩形空間。html
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context
參數ios
sizeapp
寬高限制,用於計算文本繪製時佔據的矩形塊。佈局
The width and height constraints to apply when computing the string’s bounding rectangle.字體
optionsui
文本繪製時的附加選項。可能取值請參考「NSStringDrawingOptions」。spa
contextcode
context上下文。包括一些信息,例如如何調整字間距以及縮放。最終,該對象包含的信息將用於文本繪製。該參數可爲 nil 。htm
返回值對象
一個矩形,大小等於文本繪製完將佔據的寬和高。
討論
能夠使用該方法計算文本繪製所需的空間。size 參數是一個constraint ,用於在繪製文本時做爲參考。可是,若是繪製完整個文本須要更大的空間,則返回的矩形大小可能比 size 更大。通常,繪製時會採用constraint 提供的寬度,但高度則會根據須要而定。
特殊狀況
爲了計算文本塊的大小,該方法採用默認基線。
若是 NSStringDrawingUsesLineFragmentOrigin未指定,矩形的高度將被忽略,同時使用單線繪製。(因爲一個 bug,在 iOS6 中,寬度會被忽略)
兼容性
聲明於
NSStringDrawing.
另外,關於參數(NSStringDrawingOptions)options
typedef NS_ENUM(NSInteger, NSStringDrawingOptions) { NSStringDrawingTruncatesLastVisibleLine = 1 << 5, // Truncates and adds the ellipsis character to the last visible line if the text doesn't fit into the bounds specified. Ignored if NSStringDrawingUsesLineFragmentOrigin is not also set. NSStringDrawingUsesLineFragmentOrigin = 1 << 0, // The specified origin is the line fragment origin, not the base line origin NSStringDrawingUsesFontLeading = 1 << 1, // Uses the font leading for calculating line heights NSStringDrawingUsesDeviceMetrics = 1 << 3, // Uses image glyph bounds instead of typographic bounds } NS_ENUM_AVAILABLE_IOS(6_0);
NSStringDrawingTruncatesLastVisibleLine:
若是文本內容超出指定的矩形限制,文本將被截去並在最後一個字符後加上省略號。若是沒有指定NSStringDrawingUsesLineFragmentOrigin選項,則該選項被忽略。
NSStringDrawingUsesLineFragmentOrigin:
繪製文本時使用 line fragement origin 而不是 baseline origin。
The origin specified when drawing the string is the line fragment origin and not the baseline origin.
NSStringDrawingUsesFontLeading:
計算行高時使用行距。(譯者注:字體大小+行間距=行距)
NSStringDrawingUsesDeviceMetrics:
計算佈局時使用圖元字形(而不是印刷字體)。
Use the image glyph bounds (instead of the typographic bounds) when computing layout.
OS7中出現了新的方法計算UILabel中根據給定的Font以及str計算UILabel的frameSize的方法.本人提供category以下:
UILabel+StringFrame.h
// // UILabel+StringFrame.h // LabelHeight // // Copyright (c) 2014年 Y.X. All rights reserved. // #import <UIKit/UIKit.h> @interface UILabel (StringFrame) - (CGSize)boundingRectWithSize:(CGSize)size; @end
UILabel+StringFrame.m
//
// UILabel+StringFrame.m
// LabelHeight
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//
#import "UILabel+StringFrame.h"
@implementation UILabel (StringFrame)
- (CGSize)boundingRectWithSize:(CGSize)size { NSDictionary *attribute = @{NSFontAttributeName: self.font}; CGSize retSize = [self.text boundingRectWithSize:size options:\ NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attribute context:nil].size; return retSize; }