1.frame和bounds的重新认识
-
frame(参照物是:父控件)
- 以
父控件
内容
的左上角为坐标原点, 计算出的控件自己
矩形框
的位置和尺寸(如果父控件内容坐标发生改变,则子控件也会随之改变,将矩形框看成是裁剪框
)
- 以
-
bounds(参照物是:自己, 矩形框是裁剪框, 矩形框显示的是裁剪的内容,但是矩形框在父控件的位置未改变,只是显示的内容随bounds改变)
以
控件自己
内容
的左上角为坐标原点, 计算(即裁剪出
)出的控件自己
矩形框
的位置和尺寸(即将裁剪出来的区域显示出来
)矩形框
在其内容
的坐标就是bounds.origin
,即偏移量
-
概括
- frame.size == bounds.size(尺寸是相等的)
- scrollView.bounds.origin == scrollView.contentOffset(scrollview中初始的偏移量和初始的bounds一样)
2.bounds和frame的区别
3.矩形框和内容的理解
- 矩形框
- 控件自己的显示位置和尺寸(在父控件)
- 内容
- 控件内部的东西,比如它的子控件(在子控件的内容)
在使用UITableViewController过程中,可能会出现的错误
@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来用
-
错误做法
-
正确做法
3.contentInset的调整(调整contentInset,会改变bounds)
- 调整contentInset, 会使内容整体移动,但是内容的原点并没有下移,类似HTML的padding,即间距, 因此矩形框的左上角所处的坐标的y值是负数,所以改变了bounds
- tableView的headerView会影响内容的原点,contentInset不会,但是两者的设置都会影响矩形框的bounds.origin(相对于原来的内容),即会影响bounds和偏移量
- 默认情况下, 如果一个控制器A处在导航控制器管理中, 并且控制器A的第一个子控件是UIScrollView, 那么就会自动调整这个UIScrollView的contentInset
- UIEdgeInsetsMake(64, 0, 0, 0) // 有导航栏
- UIEdgeInsetsMake(20, 0, 0, 0) // 没有导航栏
- 默认情况下, 如果一个控制器A处在导航控制器管理中, 并且导航控制器又处在UITabBarController管理中, 并且控制器A的第一个子控件是UIScrollView, 那么就会自动调整这个UIScrollView的contentInset
- UIEdgeInsetsMake(64, 0, 49, 0)
- 如何禁止上述的默认问题?
控制器A.automaticallyAdjustsScrollViewInsets = NO;
4.文字内容换行
- 如何让storyboard\xib中的文字内容换行
- 快捷键: option + 回车键
- 在storyboard\xib输入\n是无法实现换行的
- 在代码中输入\n是可以实现换行的
self.label.text = @"534534534\n5345345\n5345";
5.修改状态栏样式
- 使用
UIApplication
来管理(iOS7 以前)
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
在Info.plist中做了图中的配置,可能会出现以下警告信息
View controller-based status bar appearance
(在Executable file
下添加View controller-based status bar appearance
目录)默认是YES
,如果选择了NO
则一定要用UIApplication
来设置状态栏的样式
- 使用
UIViewController
来管理(iOS7 以后苹果推荐使用)
@implementation XMGLoginRegisterViewController
// 每个控制器的状态栏由每个控制器自己决定更加科学,
//如果用UIApplication来管理,则跳转控制器以后,还要通过UIApplication重新设置,这样会更为不便
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
@end