最近通過做了一個手機版的圖書管理系統,把它放在Iphone手機上測試,在此過程中又學習到了很多額外的知識,通過查閱資料,現對UILabel做以下總結,供以後學習參考。
一.默認狀態
單行,不可獲取用戶點擊事件,UIViewContentModeRedraw模式,改變就重繪.
二.相關屬性與函數
1.文本屬性
text // label 顯示的文字
font // text 的字體,值不可以是nil,否則異常
textColor // text 的顏色
textAlignment // text 的對其方式
lineBreakMode // 當文字超出label顯示區域時的截取方式
typedef enum {
UILineBreakModeWordWrap = 0, // 以空格爲界,保留整個單詞
UILineBreakModeCharacterWrap, // 保留整個字符
UILineBreakModeClip, // 畫到邊界爲止
UILineBreakModeHeadTruncation, // 省略開始,...代替
UILineBreakModeTailTruncation, // 省略尾部,...代替
UILineBreakModeMiddleTruncation, // 省略中間,...代替.這3個多行時作用於最後一行,多行時這三個以單詞分行
} UILineBreakMode;
enabled // 文字是否可變,布爾值
2.文本區域
adjustsFontSizeToFitWidth
布爾值,@property(nonatomic) BOOL adjustsFontSizeToFitWidth,設置文本字體是否要減小來適應label的區域.只有當label的行數事1時有效.字體一直減小到你設置的最小字體值.
baselineAdjustment
當adjustsFontSizeToFitWidth值爲YES的時候,如果文本的font需要縮小,這個值控制基線位置.只有爲本行數爲1時有效
@property(nonatomic) UIBaselineAdjustment baselineAdjustment
typedef enum {
UIBaselineAdjustmentAlignBaselines = 0, // 默認值文本最上端與label中間線對齊
UIBaselineAdjustmentAlignCenters,// 文本中間與label中間線對齊
UIBaselineAdjustmentNone,// 文本最底端與label中間線對齊
} UIBaselineAdjustment;
minimumFontSize // 最小字體,行數爲1時有效,默認0.0
numberOfLines // 文本行數,爲0時沒有最大行數限制
3.高亮設置
highlightedTextColor // 文本高亮時的顏色
highlighted // 文本是否高亮
4.繪製陰影
shadowColor // 陰影顏色
shadowOffset // 陰影偏移
5.重載繪畫
– textRectForBounds:limitedToNumberOfLines: // 不可直接調用,需要子類重載,第二參數爲0時沒有行數限制
– drawTextInRect: // 不可直接調用,需要子類重載
6.用戶交互
userInteractionEnabled // 是否可與用戶交互,基本上也都在子類中重載使用
三.常用範例
1.取得label大小正好適合文字
NSString* text = @"this is a simple uilabel sample"; UILabel* label = [[UILabel alloc] initWithFrame:CGRectZero]; label.backgroundColor = [UIColor redColor]; CGFloat width = 30.0; UIFont* font = [UIFont systemFontOfSize:14.0]; label.font = font; label.numberOfLines = 0; label.lineBreakMode = UILineBreakModeWordWrap; label.text = text; // 方法一,用文字來確定 CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(width, 2000.0) lineBreakMode:UILineBreakModeWordWrap]; // 方法二,自適應 //CGSize size = [label sizeThatFits:CGSizeMake(width, 2000.0)]; label.frame = CGRectMake(0, 0, size.width, size.height);