iOS Autolayout - 如何在视图之间设置两个不同的距离取决于屏幕高度

Dan*_*iel 36 iphone ios autolayout ios6

我知道我错过了什么,因为这必须是一件容易实现的事情.

我的问题是我在我的"加载屏幕"(飞溅后出现的那个)UIImageView有两个不同的图像,用于3.5英寸和4英寸大小的屏幕.在该图像的某个位置,我放置了一个UIActivityIndi​​cator,告诉用户应用程序正在后台加载某些内容.两个图像的位置不一样,因为其中一个明显高于另一个,所以我想设置一个autolayout约束,允许我将该活动指示器放在不同的高度,取决于应用程序是否在运行iPhone 5与否.

没有Autolayout,我将视图的frame.origin.y设置为300(例如),然后在ViewController的viewDidLoad方法中,我会问应用程序是否在iPhone 5中运行,所以我' d将值更改为,例如,350.我不知道如何使用Autolayout执行此操作,我认为它必须非常简单.

rob*_*off 109

您可以NSLayoutConstraint在视图控制器上创建一个插座,并将插座连接到xib或故事板中的活动指示器的Y约束.然后,updateViewContraints向视图控制器添加一个方法,并根据屏幕大小更新约束的常量.

将约束连接到出口

这是一个例子updateViewConstraints:

- (void)updateViewConstraints {
    [super updateViewConstraints];
    self.activityIndicatorYConstraint.constant =
        [UIScreen mainScreen].bounds.size.height > 480.0f ? 200 : 100;
}
Run Code Online (Sandbox Code Playgroud)

当然,你会想要输入适当的值而不是200100.您可能想要定义一些命名常量.另外,别忘了打电话[super updateViewConstraints].

  • 我使用ScreenFlow来录制屏幕并编辑和裁剪录音.我用Photoshop将电影变成了GIF. (11认同)
  • 如果您还没有从[WWDC 2012](https://developer.apple.com/videos/wwdc/2012/)观看自动布局视频,您应该尝试找时间.这包括在内,以及许多其他有用的提示.(在该页面上搜索"自动布局",而不是"自动布局".) (4认同)
  • 您使用了什么工具来制作出令人敬畏的GIF? (2认同)

Ham*_*mza 17

@Rob答案的问题是你应该为每个约束做很多代码.因此,要解决这个问题,只需ConstraintLayout在代码中添加类并修改IB中所需设备的约束常量值:

在此输入图像描述

//
//  LayoutConstraint.swift
//  MyConstraintLayout
//
//  Created by Hamza Ghazouani on 19/05/2016.
//  Copyright © 2016 Hamza Ghazouani. All rights reserved.
//

import UIKit

@IBDesignable
class LayoutConstraint: NSLayoutConstraint {

    @IBInspectable
    var 3¨5_insh: CGFloat = 0 {
        didSet {
            if UIScreen.main.bounds.maxY == 480 {
                constant = 3¨5_insh
            }
        }
    }

    @IBInspectable
    var 4¨0_insh: CGFloat = 0 {
        didSet {
            if UIScreen.main.bounds.maxY == 568 {
                constant = 4¨0_insh
            }
        }
    }

    @IBInspectable
    var 4¨7_insh: CGFloat = 0 {
        didSet {
            if UIScreen.main.bounds.maxY == 667 {
                constant = 4¨7_insh
            }
        }
    }

    @IBInspectable
    var 5¨5_insh: CGFloat = 0 {
        didSet {
            if UIScreen.main.bounds.maxY == 736 {
                constant = 5¨5_insh
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

不要忘记继承你的类约束ConstraintLayout 我将尽快添加objective-c版本