1.frame和bounds的重新認識
-
frame(參照物是:父控件)
- 以
父控件
內(nèi)容
的左上角為坐標原點, 計算出的控件自己
矩形框
的位置和尺寸(如果父控件內(nèi)容坐標發(fā)生改變,則子控件也會隨之改變,將矩形框看成是裁剪框
)
- 以
-
bounds(參照物是:自己, 矩形框是裁剪框, 矩形框顯示的是裁剪的內(nèi)容,但是矩形框在父控件的位置未改變,只是顯示的內(nèi)容隨bounds改變)
以
控件自己
內(nèi)容
的左上角為坐標原點, 計算(即裁剪出
)出的控件自己
矩形框
的位置和尺寸(即將裁剪出來的區(qū)域顯示出來
)矩形框
在其內(nèi)容
的坐標就是bounds.origin
,即偏移量
-
概括
- frame.size == bounds.size(尺寸是相等的)
- scrollView.bounds.origin == scrollView.contentOffset(scrollview中初始的偏移量和初始的bounds一樣)
2.bounds和frame的區(qū)別
bounds和frame的區(qū)別.png
3.矩形框和內(nèi)容的理解
- 矩形框
- 控件自己的顯示位置和尺寸(在父控件)
- 內(nèi)容
- 控件內(nèi)部的東西,比如它的子控件(在子控件的內(nèi)容)
在使用UITableViewController過程中,可能會出現(xiàn)的錯誤
@interface TestTableViewController : UITableViewController
@end
'-[UITableViewController loadView] instantiated view controller with identifier "UIViewController-BYZ-38-t0r" from storyboard "Main", but didn't get a UITableView.'
-
造成這個錯誤的原因
- 錯誤地將一個UIViewController當做UITableViewController來用
-
錯誤做法
Snip20151108_134.png -
正確做法
Snip20151108_135.png
Snip20151108_137.png
3.contentInset的調(diào)整(調(diào)整contentInset,會改變bounds)
- 調(diào)整contentInset, 會使內(nèi)容整體移動,但是內(nèi)容的原點并沒有下移,類似HTML的padding,即間距, 因此矩形框的左上角所處的坐標的y值是負數(shù),所以改變了bounds
- tableView的headerView會影響內(nèi)容的原點,contentInset不會,但是兩者的設(shè)置都會影響矩形框的bounds.origin(相對于原來的內(nèi)容),即會影響bounds和偏移量
- 默認情況下, 如果一個控制器A處在導(dǎo)航控制器管理中, 并且控制器A的第一個子控件是UIScrollView, 那么就會自動調(diào)整這個UIScrollView的contentInset
- UIEdgeInsetsMake(64, 0, 0, 0) // 有導(dǎo)航欄
- UIEdgeInsetsMake(20, 0, 0, 0) // 沒有導(dǎo)航欄
- 默認情況下, 如果一個控制器A處在導(dǎo)航控制器管理中, 并且導(dǎo)航控制器又處在UITabBarController管理中, 并且控制器A的第一個子控件是UIScrollView, 那么就會自動調(diào)整這個UIScrollView的contentInset
- UIEdgeInsetsMake(64, 0, 49, 0)
- 如何禁止上述的默認問題?
控制器A.automaticallyAdjustsScrollViewInsets = NO;
4.文字內(nèi)容換行
- 如何讓storyboard\xib中的文字內(nèi)容換行
- 快捷鍵: option + 回車鍵
- 在storyboard\xib輸入\n是無法實現(xiàn)換行的
- 在代碼中輸入\n是可以實現(xiàn)換行的
self.label.text = @"534534534\n5345345\n5345";
5.修改狀態(tài)欄樣式
- 使用
UIApplication
來管理(iOS7 以前)
Snip20151108_152.png
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
在Info.plist中做了圖中的配置,可能會出現(xiàn)以下警告信息
Snip20151108_153.png
View controller-based status bar appearance
(在Executable file
下添加View controller-based status bar appearance
目錄)默認是YES
,如果選擇了NO
則一定要用UIApplication
來設(shè)置狀態(tài)欄的樣式
- 使用
UIViewController
來管理(iOS7 以后蘋果推薦使用)
@implementation XMGLoginRegisterViewController
// 每個控制器的狀態(tài)欄由每個控制器自己決定更加科學(xué),
//如果用UIApplication來管理,則跳轉(zhuǎn)控制器以后,還要通過UIApplication重新設(shè)置,這樣會更為不便
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
@end
6.在xib\storyboard中使用KVC
Snip20151108_177.png