让系统自动控制控件在控制器视图的位置
2014-07-13 15:06
337 查看
IPhone、IPad经常会遇到横竖屏切换,或者需要自动调整大小。如果你的界面不能用storyboard和xib来生成界面的话,先把控制器视图的frame属性值固定下来,然后添加subview(子视图)的时候,就可以使用视图继承类(UIView) 自带的 autoresizingMask 属性,之后如果横竖屏切换,或者是使用UIPopoverController之类的方法,就可以只设置一次frame属性,以后的frame属性都是自适应的(frame缩小太多的话效果不好,根据情况而定)。
原理:设置autoresizingMask后,当页面的大小发生改变,那么系统会给已经显示的,所有有关的子视图进行自动调整。属性中的所有控件根据 autoresizingMask 来自动设置属性 frame,你能在对应的 -(void)setFrame:(CGRect)rect{} 实现系统的回调,在调用 setFrame 方法的过程中,系统会自动加载默认的动画方法。
UIViewAutoresizing 的属性定义如下:
{
UIViewAutoresizingNone
= 0,
UIViewAutoresizingFlexibleLeftMargin
= 1 << 0,
UIViewAutoresizingFlexibleWidth
= 1 << 1,
UIViewAutoresizingFlexibleRightMargin
= 1 << 2,
UIViewAutoresizingFlexibleTopMargin
= 1 << 3,
UIViewAutoresizingFlexibleHeight
= 1 << 4,
UIViewAutoresizingFlexibleBottomMargin
= 1 << 5
};
typedef NSUInteger UIViewAutoresizing;
UIViewAutoresizingFlexibleLeftMargin 视图靠右对齐
UIViewAutoresizingFlexibleWidth 视图自适应宽度
UIViewAutoresizingFlexibleRightMargin 视图靠左对齐
UIViewAutoresizingFlexibleTopMargin 视图靠下对齐
UIViewAutoresizingFlexibleHeight 视图自适应高度
UIViewAutoresizingFlexibleBottomMargin 视图靠上对齐
注意:LeftMargin、RightMargin、TopMargin、BottomMargin的实际对齐方向是相反的
示例:让按钮始终在 ViewController
的右上角显示:
原理:设置autoresizingMask后,当页面的大小发生改变,那么系统会给已经显示的,所有有关的子视图进行自动调整。属性中的所有控件根据 autoresizingMask 来自动设置属性 frame,你能在对应的 -(void)setFrame:(CGRect)rect{} 实现系统的回调,在调用 setFrame 方法的过程中,系统会自动加载默认的动画方法。
UIViewAutoresizing 的属性定义如下:
{
UIViewAutoresizingNone
= 0,
UIViewAutoresizingFlexibleLeftMargin
= 1 << 0,
UIViewAutoresizingFlexibleWidth
= 1 << 1,
UIViewAutoresizingFlexibleRightMargin
= 1 << 2,
UIViewAutoresizingFlexibleTopMargin
= 1 << 3,
UIViewAutoresizingFlexibleHeight
= 1 << 4,
UIViewAutoresizingFlexibleBottomMargin
= 1 << 5
};
typedef NSUInteger UIViewAutoresizing;
UIViewAutoresizingFlexibleLeftMargin 视图靠右对齐
UIViewAutoresizingFlexibleWidth 视图自适应宽度
UIViewAutoresizingFlexibleRightMargin 视图靠左对齐
UIViewAutoresizingFlexibleTopMargin 视图靠下对齐
UIViewAutoresizingFlexibleHeight 视图自适应高度
UIViewAutoresizingFlexibleBottomMargin 视图靠上对齐
注意:LeftMargin、RightMargin、TopMargin、BottomMargin的实际对齐方向是相反的
示例:让按钮始终在 ViewController
的右上角显示:
- (void)viewDidLoad { [super viewDidLoad]; UIButton *right = [UIButton buttonWithType:UIButtonTypeRoundedRect]; right.frame = CGRectMake(self.view.frame.size.width-300, 0, 300, 300); right.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [right setTitle:@"456" forState:UIControlStateNormal]; [self.view addSubview:right]; }
相关文章推荐
- 让系统自动控制控件在控制器视图的位置
- iOS 新特性分列式 之 iOS 5.x - 主要内容:自动引用计数、故事板、控件自定义呈现、容器视图控制器
- 用代码来控制自定义的控件 自动适应横竖屏时的相对位置
- 用代码来控制自定义的控件 自动适应横竖屏时的相对位置
- 根据控件位置自动算出坐标在后面加一个提示框
- vc学习之窗口大小发生变更时使控件自动摆放到合适的位置
- 对话框程序自动调整控件大小和位置的宏
- SDK实现自动改变控件位置和大小的函数
- FLEX 屏闭系统右键菜单,及在列表控件DataGrid/Tree/List上点右键时自动选择当前行
- VC中自动改变控件位置和大小的对话框类(转)
- VC中自动改变控件位置和大小的对话框类
- vs2005中如何正确用流布局开控制控件的位置
- 【百度地图API】建立全国银行位置查询系统(二)——怎样为地图添加控件
- FLEX 屏闭系统右键菜单,及在列表控件DataGrid\Tree\List上点右键时自动选择当前行
- winform中,如何控制控件位置随窗体的大小改变而改变
- 在数据绑定 DataGridView 控件时控制是否自动生成列
- 控制ASP.NET2.0中控件的位置
- 控制控件在页面的显示位置
- VC中自动改变控件位置和大小的对话框类
- VC中自动改变控件位置和大小的对话框类