Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自动布局与框架尺寸_Ios_Swift_Autolayout_Pixels_Frames - Fatal编程技术网

Ios 自动布局与框架尺寸

Ios 自动布局与框架尺寸,ios,swift,autolayout,pixels,frames,Ios,Swift,Autolayout,Pixels,Frames,所以我有点不好意思问这个问题,因为它看起来很初级,但自从开始iOS开发(大约一年的自我/互联网教学)以来,当不使用故事板时,我严重依赖框架尺寸,并且非常少地使用自动布局。在Objective C中,我发现自己需要更频繁地使用自动布局,但使用Swift,我可以为帧的x和y原点、中心等设置动画。。。我从来没有遇到过一种情况,我无法实现我想要的帧大小和像素位置,我做了一些相当复杂的视图工作。我的问题是,使用自动布局而不是帧大小和像素位置有什么好处?我不想因为无知和习惯而错过一些巨大的性能优势。非常感谢

所以我有点不好意思问这个问题,因为它看起来很初级,但自从开始iOS开发(大约一年的自我/互联网教学)以来,当不使用故事板时,我严重依赖框架尺寸,并且非常少地使用自动布局。在Objective C中,我发现自己需要更频繁地使用自动布局,但使用Swift,我可以为帧的x和y原点、中心等设置动画。。。我从来没有遇到过一种情况,我无法实现我想要的帧大小和像素位置,我做了一些相当复杂的视图工作。我的问题是,使用自动布局而不是帧大小和像素位置有什么好处?我不想因为无知和习惯而错过一些巨大的性能优势。非常感谢

开发自动布局是为了允许程序员在iOS上为任意大小的屏幕和视图编写程序。此前,对于iPhone的前四代,iOS开发者可以将他们的设计目标定为一个屏幕大小,但最近的历史表明,苹果对制造不同形状和大小的硬件持开放态度。自动布局提供了一种创建UI的方便方法,可以适应不同的屏幕和视图尺寸。如果没有自动布局,可以利用不同的视图维度开发UI吗?对但是,为了使用多个UI元素创建真正可调整大小的视图,程序员通常必须相对于其他UI元素来调整元素的大小,而其他UI元素本身也必须调整大小和位置。例如:

NSString *nameString = [NSString stringWithFormat:@"%@", self.name];
        CGSize nameSize = [nameString sizeWithAttributes:attribs];

        [nameString drawAtPoint:CGPointMake(self.bounds.size.width*0.5-nameSize.width*0.5, IMAGE_INSET+4*CONTENT_BUFFER(self.bounds.size.height)+facePicHeight) withAttributes:attribs];

        questionFont = [UIFont systemFontOfSize:self.bounds.size.height*0.025];
        attribs = @{NSFontAttributeName: questionFont, NSParagraphStyleAttributeName:paragraphStyle};

        NSString *maleString = [NSString stringWithFormat:@"%@", self.male];
        CGSize maleSize = [maleString sizeWithAttributes:attribs];
        [maleString drawAtPoint:CGPointMake(self.bounds.size.width*0.5-maleSize.width*0.5,
                                            IMAGE_INSET+5*CONTENT_BUFFER(self.bounds.size.height)+facePicHeight+nameSize.height) withAttributes:attribs];

        NSString *femaleString = [NSString stringWithFormat:@"%@", self.female];
        CGSize femaleSize = [femaleString sizeWithAttributes:attribs];
        [femaleString drawAtPoint:CGPointMake(self.bounds.size.width*0.5-femaleSize.width*0.5,
                                              IMAGE_INSET+6*CONTENT_BUFFER(self.bounds.size.height)+facePicHeight+nameSize.height+maleSize.height) withAttributes:attribs];

        NSString *babyString = [NSString stringWithFormat:@"%@", self.baby];
        CGSize babySize = [babyString sizeWithAttributes:attribs];
        [babyString drawInRect:CGRectMake(IMAGE_INSET+CONTENT_BUFFER(self.bounds.size.height), IMAGE_INSET+7*CONTENT_BUFFER(self.bounds.size.height)+facePicHeight+nameSize.height+maleSize.height+femaleSize.height, self.bounds.size.width-2.0*(IMAGE_INSET+CONTENT_BUFFER(self.bounds.size.height)), babySize.height) withAttributes:attribs];

整个事情可能会变得有点笨重。显然,有些视图比其他视图简单,但如果您有复杂的视图,希望支持多任务处理和本地化以及其他将影响UI布局的内容,则通常更容易使用自动布局。

依赖帧大小等于计算大小。当使用百分比或比例时,它可以在不同的手机型号上工作,但在一些分辨率上有时可能看起来很奇怪。然后,您将添加另一个条件语句,因为例如,在iPhone4S上,您需要稍微不同的布局。您的代码越来越复杂,可能导致任何更改都存在风险。这是可行的,但为什么要重新发明轮子呢

诸如基本约束之类的工具有时会替换布局的巨大逻辑块。当第二个标签扩展时压缩一个标签的逻辑意味着很少有ifs。考虑10个标签。随着尺寸类别的增加,启用/禁用约束、压缩和拥抱,自动布局对我来说已经变得不可替代,我建议大家看看它,因为大多数公司都在使用它,如果不是在故事板中,那么是在xibs或代码中,而是在使用自动布局。

tl;dr 了解如何使用自动布局–它为真实世界的应用程序节省了大量时间

长答案:

最后,如果您想使用苹果提供的自动布局或大小类等功能,这取决于您。这些方法的主要好处是,在最终产品的UI呈现方面,性能不是真正的。如果你打算开发一款适用于不同屏幕大小和方向的应用程序,那么你需要投入时间考虑所有边缘情况

假设你想做所有你需要做的工作来支持iPhone 4/4s屏幕大小、iPhone 5/5s屏幕大小、iPhone 6/6s(加上)屏幕大小和iPad屏幕大小以及上述所有屏幕大小的纵向和横向模式(“这是一个很好的概述”):好吧,这没什么问题,去做吧。当然,您需要非常仔细地进行测试,并且始终保持此列表的最新状态–在每个应用程序中,您都在使用自己的解决方案。如果是为了你,那就做吧

但大多数人都想把自己的想法表达出来,而不想太多地与不同的屏幕大小作斗争。当然,你可以从一个应用程序中提取你自己的逻辑,在你所有的应用程序中使用它,而这正是自动布局和屏幕大小的意义所在简单地说,苹果已经完成了所有的工作,使您的框架设置在不同的屏幕上为您工作。你只需要使用他们的新词汇表(约束)就可以了

换句话说:它是一个抽象层,直接处理屏幕渲染逻辑。如果你不喜欢它,就让它去吧。但是,如果你计划开发一些可以在不同的iPhone/iPad版本上运行的严肃应用程序,并计划维护这些应用程序,那么,请学习如何使用自动布局和大小类。它将为您和所有未来的维护人员节省相当多的开发时间

一个很好的起点是。或者像raywenderlich.com上的教程

苹果公司自己(在上面链接的文档中)就这一困难发表了以下看法:

在许多方面,以编程方式定义视图框架提供了最大的灵活性和功能。当改变发生时,你可以做任何你想要的改变。然而,由于您还必须自己管理所有更改,因此设计一个简单的用户界面需要进行大量的设计、调试和维护。创建一个真正自适应的用户界面会增加一个数量级的难度

顺便说一句: 关于编程语言,使用自动布局或框架没有任何区别:Swift和Objective-C都能很好地支持这两种方式。似乎您还没有发现如何在Obj-C中更改帧

还有一件事: 您也不需要使用故事板来使用自动布局。您可以从代码中使用自动布局。见文件。甚至有很多框架试图让这变得更简单(苹果的原始API在很多方面都不是很漂亮),我可以推荐。

我最感兴趣的是