根据屏幕尺寸快速更改按钮高度

时间:2016-10-01 15:26:42

标签: ios iphone swift xcode xcode8

所以我有一个按钮/图像,我希望在iPad或更小的iPhone上观看时更高/更小。

在Xcode> 7中,我可以将我的项目放在W / all H / all中,然后我可以将约束放在紧凑的宽度/任何高度,如果我想要它在iPhone肖像中。但是在Xcode 8中它是一个全新的系统而且我现在不知道该怎么做,所以我想根据屏幕的大小改变按钮的高度,怎么做呢?

我试图在网上搜索,找到一些约束出口的东西。如果我有自动布局,那可行吗?

2 个答案:

答案 0 :(得分:3)

如果你想在没有代码的情况下这样做,使用大小类你可以使用紧凑的宽度大小类,它适用于所有方向的所有iPhone(除iPhone6 plus之外的大型iPhone)。紧凑的宽度仅在分屏时与iPad匹配。

添加vairant: - 为您的按钮添加高度约束并将其设置为50(这将为any/any尺寸类添加约束):

  • 在故事板上选择约束
  • 点击尺寸检查器(右侧窗口的第五个标签)
  • 点击Constant
  • 旁边的小加号图标
  • 为宽度选择compact,为其他人选择any
  • 现在编辑wC的高度常量并将其设置为30

其他方法是在代码中使用UIUserInterfaceIdiom枚举设置高度,例如:

if UIDevice.current.userInterfaceIdiom == .pad {
    //adjust size for iPads
}else{
    //adjust size for others
}

答案 1 :(得分:2)

您可以使用:

Swift 3

class ViewController: UIViewController {

    let screenSize: CGRect = UIScreen.main.bounds
    @IBOutlet weak var buttonWidthContraint: NSLayoutConstraint!
    @IBOutlet weak var buttonHeightContraint: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()

        buttonHeightContraint.constant = (screenSize.height / 2)
        buttonWidthContraint.constant = (screenSize.width / 2)

    }
}

Swift 2

class ViewController: UIViewController {

    let screenSize: CGRect = UIScreen.mainScreen().bounds
    @IBOutlet weak var buttonWidthContraint: NSLayoutConstraint!
    @IBOutlet weak var buttonHeightContraint: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()

        buttonHeightContraint.constant = (screenSize.height / 2)
        buttonWidthContraint.constant = (screenSize.width / 2)

    }
}

这样UIButton.height始终是屏幕/ 2的大小。

只需查看您需要的正确商数即可。例如(screenSize.height / 25.3),然后在iPad上,在每个iPhone上等等,按钮将始终具有高度,具体取决于设备。

另一种可能性是UIDeviceExtension

import Foundation
import UIKit

public extension UIDevice {

    var modelName: String {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8 where value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }

        switch identifier {
        case "iPod5,1":                                 return "iPod Touch 5"
        case "iPod7,1":                                 return "iPod Touch 6"
        case "iPhone3,1", "iPhone3,2", "iPhone3,3":     return "iPhone 4"
        case "iPhone4,1":                               return "iPhone 4s"
        case "iPhone5,1", "iPhone5,2":                  return "iPhone 5"
        case "iPhone5,3", "iPhone5,4":                  return "iPhone 5c"
        case "iPhone6,1", "iPhone6,2":                  return "iPhone 5s"
        case "iPhone7,2":                               return "iPhone 6"
        case "iPhone7,1":                               return "iPhone 6 Plus"
        case "iPhone8,1":                               return "iPhone 6s"
        case "iPhone8,2":                               return "iPhone 6s Plus"
        case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
        case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad 3"
        case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad 4"
        case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
        case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
        case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad Mini"
        case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad Mini 2"
        case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad Mini 3"
        case "iPad5,1", "iPad5,2":                      return "iPad Mini 4"
        case "iPad6,7", "iPad6,8":                      return "iPad Pro"
        case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4", "iPad3,1", "iPad3,2", "iPad3,3", "iPad3,4", "iPad3,5", "iPad3,6", "iPad4,1", "iPad4,2", "iPad4,3", "iPad5,3", "iPad5,4", "iPad2,5", "iPad2,6", "iPad2,7", "iPad4,4", "iPad4,5", "iPad4,6", "iPad4,7", "iPad4,8", "iPad4,9", "iPad5,1", "iPad5,2":                       return "iPad"
        case "AppleTV5,3":                              return "Apple TV"
        case "i386", "x86_64":                          return "Simulator"
        default:                                        return identifier
        }
    }

}

用作以下(例如):

let modelName = UIDevice.currentDevice().modelName
if modelName == "iPad" {
    buttonOutlet.frame.size.height =  42
} else if modelName == "iPhone 4" {
    buttonOutlet.frame.size.height =  25
}

等等。