是否需要切换到IOS自动布局?

是否需要切换到IOS自动布局?,ios,objective-c,autolayout,xib,iphone-6,Ios,Objective C,Autolayout,Xib,Iphone 6,我有一个应用程序启动并运行,它使用旧的iOS xib弹簧和支柱设计方法。每个屏幕都包含两个适用于iPhone 3.5英寸和iPhone 4英寸的xib文件,所有编程动画都略微通用,以便在两种分辨率下都能工作 自从iPhone6和iPhone6 Plus手机推出以来,这一切都有点失败,以至于这些设备上的应用程序浏览量非常小。我使用了一种变通方法,通过删除6和6+分辨率的“必需”图标文件,确保该应用程序在6和6+上扩展,该图标文件告诉iOS,该应用程序是为了支持这些设备上的本机分辨率而设计的 我的问

我有一个应用程序启动并运行,它使用旧的iOS xib弹簧和支柱设计方法。每个屏幕都包含两个适用于iPhone 3.5英寸和iPhone 4英寸的xib文件,所有编程动画都略微通用,以便在两种分辨率下都能工作

自从iPhone6和iPhone6 Plus手机推出以来,这一切都有点失败,以至于这些设备上的应用程序浏览量非常小。我使用了一种变通方法,通过删除6和6+分辨率的“必需”图标文件,确保该应用程序在6和6+上扩展,该图标文件告诉iOS,该应用程序是为了支持这些设备上的本机分辨率而设计的

我的问题是,每次视图出现问题时,我都尝试将所有视图切换到自动布局和大小类(花费了4天的时间)。有些图像只在高度上放大,有些拥抱一侧,有些滚动视图只在一侧显示图像,等等,所以我恢复使用相同的struts和Spring技术

  • 我真的需要将视图转换为自动布局吗?有没有办法避免这种情况或指导方针,这样我可能就不需要它了

  • 如果没有出路,人们通常如何在自动布局视图中制作动画?所有动画都是翻译的 动画,以前两个设备都有320宽度,这使它 更简单的是,我们现在如何处理不同的分辨率并使其通用 翻译动画

  • 没有人用枪指着你的头来使用Autolayout。现在有很多可能的屏幕尺寸,所以我们的想法是自动布局可以帮助您的界面适应不同的尺寸。如果你不想使用它,就不要使用它

  • 我不明白第二个问题,加上你用了一种很有趣的方式“解决”。这不是关于分辨率,而是关于尺寸,简单明了。无论是否使用自动布局,问题都是相同的。如果要从屏幕左侧到屏幕右侧设置动画,当然,如果屏幕较宽,则必须进一步设置动画。但是你知道屏幕的大小,所以没有问题。你只要做一点基本的算术

    如果你使用自动布局,你甚至不需要算术;您可以使用Autolayout相对定位对象,它们可以在任意大小的屏幕上工作。这就是重点

  • 例如,下面的代码确实可以为从屏幕左侧到右侧移动视图设置动画,并且无论屏幕大小如何,它都可以工作

    let c = self.leftConstraint.constant
    NSLayoutConstraint.deactivateConstraints([self.leftConstraint])
    let rightConstraint = NSLayoutConstraint(
        item: v, attribute: .Trailing, relatedBy: .Equal, toItem: self.view, 
        attribute: .TrailingMargin, multiplier: 1, constant: -c)
    NSLayoutConstraint.activateConstraints([rightConstraint])
    UIView.animateWithDuration(0.4, animations: {self.view.layoutIfNeeded()})
    
  • 您可以通过为每个屏幕大小创建更多的xib文件,然后确定屏幕大小并加载适当的xib文件来解决这个问题。但那会更麻烦!尤其是在苹果推出的每一款新的屏幕尺寸上,你都必须继续这样做。所以,使用AutoLayout,阅读教程,您将很好地使用它!我从未遇到过不能使用自动布局的情况。它非常强大

  • 您可以设置约束动画!如果按住ctrl键并将约束(那些蓝线)拖动到代码中,可以按住指向
    NSLayoutConstraint
    对象的指针,然后只需更改
    [UIView animate…
    块中的
    .constant


  • 你不必切换到自动布局,但越快切换,从长远来看,事情就越简单。谁知道我们将来会看到什么新尺寸的屏幕

    使用AutoLayout时,您可以设置视图的动画,只需稍微不同。您可以更改影响视图的约束,而不是更改帧矩形。这可以通过更改现有约束上的常数、更改优先级来实现(注意,您不能更改设置为1000的优先级),或通过添加/删除约束

    设置这些更改的动画的步骤包括:

    1) 在父视图上调用
    layoutifneed
    ,以确保所有内容都已位于正确的位置。
    2) 对约束、常数、优先级等进行所需的更改。

    3) 再次调用
    layoutIfNeeded
    ,这次是在
    UIView
    animateWithDuration
    方法中。

    要开始使用iPhone 6/6+,请将代码中的
    320
    的所有实例替换为
    cRectGetWidth(self.view.frame)
    。如果它不起作用,请将代码移动到
    视图WillLayoutSubViews
    ,或者
    layoutSubviews
    ,如果它是
    UIView
    子类。回答非常好-考虑周到,信息量非常丰富。非常好,即使我也给出了答案,我也不得不对其进行投票!非常有用。这就是堆栈溢出的原因。