1、nib和xib的區別
nib 是NeXT Interface Builder的縮寫。--叫法
xib 是 xml nib 文件.--文件的后綴名
深入理解請看:<a title="你好">
nib&xib</a>
2、IBOutlet & IBOutletCollection & IBAction
可以把他們理解成插座、輸出口。
xcode例子
基本的連接操作。
3、File's owner & First Responder
File's Owner是控制對象,可以說是nib文件的所有者,控制管理可視化對象。
View和ViewController之間的對應關系,需要一個橋梁來進行連接的,這個橋梁就是File's Owner。
View中每次只會有一個對象與用戶進行交互,那么當前交互的對象即為First Responder。比如點擊文本框,那么此時文本框就是First Responder。
一個class可以連接多個nib。針對業務邏輯相似,UI設計不同,可以采用這種做法。減少工作量。
3、創建基礎控件
因為做法相似,挑兩個常用的控件講解一下。
首先了解一下xib面板
file inspector
quick help inspector
identity inspector
attribute inspector
size inspector
connection inspector
3.1 UILabel
Text:plain attributed
在ios6以后增加了attributeText屬性。
在ios6以前,如果實現上圖的效果,需要用CoreText框架繪制。
現在在xib里面即可以達到這樣的效果。大大的簡化了開發的難度。
基本屬性
color
font
alignment
lines
enabled
highlighted
BaseLine
linebreakMode
AotoShink
shadow
先來了解一下UIFont的基本知識。對理解UILabel的屬性有幫助。
bounding box(邊界框 bbox),這是一個假想的框子,它盡可能緊密的裝入字形。
baseline(基線),一條假想的線,一行上的字形都以此線作為上下位置的參考,在這條線的左側存在一個點叫做基線的原點,
ascent(上行高度)從原點到字體中最高(這里的高深都是以基線為參照線的)的字形的頂部的距離,ascent是一個正值
descent(下行高度)從原點到字體中最深的字形底部的距離,descent是一個負值(比如一個字體原點到最深的字形的底部的距離為2,那么descent就為-2)
linegap(行距),linegap也可以稱作leading(其實準確點講應該叫做External leading),行高lineHeight則可以通過 ascent + |descent| + linegap 來計算。
想了解更多,請看
<a > CoreText基本用法</a>
<a > CoreText入門</a>
看完UIFont的字體結構,再看一下baseLineAdjustment屬性更容易理解。
baseLineAdjustment屬性
當字體在最小值時,這個值控制文本的基線位置,只有文本行數為1是有效
typedef enum {
UIBaselineAdjustmentAlignBaselines = 0,//默認值文本最上端于label中線對齊
UIBaselineAdjustmentAlignCenters, //文本中線于label中線對齊
UIBaselineAdjustmentNone, //文本最低端與label中線對齊
} UIBaselineAdjustment;
效果:
lineBreakMode:超出label邊界文字的截取方式
lineBreakMode屬性
typedef NS_ENUM(NSInteger, NSLineBreakMode) {
NSLineBreakByWordWrapping = 0, 以空格為邊界,保留整個單詞
NSLineBreakByCharWrapping, 按照字符裁剪
NSLineBreakByClipping, 到邊界為止
NSLineBreakByTruncatingHead, 省略開始,以……代替
NSLineBreakByTruncatingTail, 省略結尾,以……代替
NSLineBreakByTruncatingMiddle 省略中間,以……代替
} NS_ENUM_AVAILABLE_IOS(6_0);
效果圖:
父類UIView的屬性
小技巧
選中控件+alt鍵,可以查看相對距離。
拖動控件,可以查看到標準基線。
給控件添加標注
雙擊則選中控件。
3.2UIImageView
image
highlighted
父類UIView的屬性
contentMode
stretching
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;
4.Autosize
enum {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
看一個復雜的布局文件
5.創建UITableViewCell注意點