189 8069 5689

如何通过frame适配以及AutoLayout-创新互联

这篇文章主要介绍“如何通过frame适配以及AutoLayout”,在日常操作中,相信很多人在如何通过frame适配以及AutoLayout问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何通过frame适配以及AutoLayout”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

专业从事网站设计、网站建设,高端网站制作设计,成都小程序开发,网站推广的成都做网站的公司。优秀技术团队竭力真诚服务,采用HTML5+CSS3前端渲染技术,成都响应式网站建设公司,让网站在手机、平板、PC、微信下都能呈现。建站过程建立专项小组,与您实时在线互动,随时提供解决方案,畅聊想法和感受。
  • 屏幕适配的目的

目的一:

     不同型号的iPhone和iPad可能拥有不同大小的屏幕(点坐标系不同)

     发布一款App时,不能只针对一种规格的屏幕,应当在不同大小屏幕的设备都能够运行

目的二:

   iPhone支持三个方向的旋转,iPad支持四个方向的旋转

   当屏幕旋转时,点坐标系发生变化(屏幕的宽高发生变换),这时需要屏幕上的UI元素重新进行排列

App设置是否支持多个方向:

   项目配置文件中:

   如何通过frame适配以及AutoLayout

    控制器重写supportedInterfaceOrientations方法,可以指定页面支持的方向

- (UIInterfaceOrientationMask)supportedInterfaceOrientations

   返回的是所支持方向的枚举值

默认情况横屏是不显示状态栏的,如果需要显示,在Info.plist中设置:

   如何通过frame适配以及AutoLayout

   在AppDelegate中添加代码:

[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
  • 通过frame进行屏幕适配

针对目的一:设置子视图frame时,值都是根据父视图的宽高计算得出

针对目的二:当屏幕发生翻转时,重写计算一边子视图的宽高

在控制器子类中,将子视图frame的设置放在重写的viewDidLayoutSubviews方法中:

 - (void)viewDidLayoutSubviews     //注意:该方法中应先调用重写前的父类方法

在视图子类中,将子视图frame的设置放在重写layoutSubviews方法中:

- (void)layoutSubviews  //注意:该方法中应先调用重写前的父类方法

这两个方法都会在当前控制器的view或当前view的frame获得初值以及发生变化时自动调用

如:控制器中的btn按钮居中,且规定长宽为100

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubiews];
    CGFloat x, y, w, h;
    w = h = 100;
    x = self.view.frame.size.width/2 - w/2;
    y = self.view.frame.size.height/2 - h/2;
    self.btn.frame = CGRectMake(x, y, w, h);
}
  • AutoResizing

用于确定一个视图控件在整个屏幕的位置,当屏幕尺寸变化或者发生反转时的效果

可以保证一个视图控件的部分或者全部frame属性的相对关系不发生改变,产生如居中、拉伸等效果。

如果选择使用AutoLayout,就不能使用AutoResizing

代码中使用:

   UIView对象通过方法atuoResizingMask属性设置可拉伸的属性

@property(nonatomic) UIViewAutoresizing autoresizingMask
enum {
     UIViewAutoresizingNone = 0,
     UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
     UIViewAutoresizingFlexibleWidth = 1 << 1,
     UIViewAutoresizingFlexibleRightMargin = 1 << 2,
     UIViewAutoresizingFlexibleTopMargin = 1 << 3,
     UIViewAutoresizingFlexibleHeight = 1 << 4,
     UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
typedef NSUInteger UIViewAutoresizing;

这种样子的枚举,可以用 “|”运算,传递多个数值

如居中:


v.center = self.view.center;
vw.bounds = CGRectMake(0, 0, 100, 100);
[vw setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin];

如固定在左上角:


vw.frame = CGRectMake(20, 20, 100, 100);
[vw setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin}UIViewAutoresizingFlexibleBottomMargin];

storyboard中使用:

   需要先将AutoLayout关闭(iOS7之后)

   如何通过frame适配以及AutoLayout

   选择视图后,点击后边的size属性栏。

   如何通过frame适配以及AutoLayout

   其中内部红色表示属性带拉伸效果,外部的红色表示距离屏幕边界的值固定。

   如将自身的宽高属性的拉伸去掉,则尺寸固定。

    如何通过frame适配以及AutoLayout

到此,关于“如何通过frame适配以及AutoLayout”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章题目:如何通过frame适配以及AutoLayout-创新互联
链接URL:http://jkwzsj.com/article/djjigi.html

其他资讯