使用Interface Builder创建了UIButton。现在我想使用约束来更改该按钮的位置和大小

时间:2019-02-08 05:05:23

标签: ios swift

enter image description here

在移除高度锚点之后,下面是输出

enter image description here

精确常数的屏幕截图

enter image description here

下面是视图控制器设计。从IB截取了屏幕截图。

enter image description here

我想更改使用Interface Builder创建的UIButton的位置和大小。我正在使用约束以编程方式进行此操作。 还学习约束。 我已经写了约束代码。请帮助我。

let size = self.view.frame.size.height -
        (self.layer.frame.size.height + (self.navigationController?.navigationBar.frame.height)! + 20)  

channelShowBtn?.translatesAutoresizingMaskIntoConstraints = false
channelShowBtn!.topAnchor.constraint(equalTo:self.view.topAnchor , constant:(((20 + (navigationController?.navigationBar.frame.height)!) + self.layer.frame.height))).isActive = true
channelShowBtn!.heightAnchor.constraint(equalToConstant:size).isActive = true
channelShowBtn!.widthAnchor.constraint(equalToConstant:39).isActive = true

位置和大小应该改变,但实际上没有改变。

2 个答案:

答案 0 :(得分:2)

Button constraints

您可以从xib本身设置位置。

我在下面附加了图像,可以根据需要设置宽度,高度,前导,尾随,顶部和底部约束。

Image for button Constraint

在这里您可以看到“添加新约束”选项,您可以根据需要放置按钮

设置高度限制出口:

@IBOutlet var heightConst: NSLayoutConstraint!

现在,在View中已按设备加载了设置的高度

if (UIDevice.current.screenType == .iPhones_5_5s_5c_SE){
        heightConst.constant = 400
    }else{
        heightConst.constant = 200
    }

在代码中添加UIDevice扩展(您也可以在此链接上找到此扩展:how to check screen size of iphone 4 and iphone 5 programmatically in swift):

 extension UIDevice {
    var iPhoneX: Bool {
        return UIScreen.main.nativeBounds.height == 2436
    }
    var iPhone: Bool {
        return UIDevice.current.userInterfaceIdiom == .phone
    }
    enum ScreenType: String {
        case iPhones_4_4S = "iPhone 4 or iPhone 4S"
        case iPhones_5_5s_5c_SE = "iPhone 5, iPhone 5s, iPhone 5c or iPhone SE"
        case iPhones_6_6s_7_8 = "iPhone 6, iPhone 6S, iPhone 7 or iPhone 8"
        case iPhones_6Plus_6sPlus_7Plus_8Plus = "iPhone 6 Plus, iPhone 6S Plus, iPhone 7 Plus or iPhone 8 Plus"
        case iPhones_X_XS = "iPhone X or iPhone XS"
        case iPhone_XR = "iPhone XR"
        case iPhone_XSMax = "iPhone XS Max"
        case unknown
    }
    var screenType: ScreenType {
        switch UIScreen.main.nativeBounds.height {
        case 960:
            return .iPhones_4_4S
        case 1136:
            return .iPhones_5_5s_5c_SE
        case 1334:
            return .iPhones_6_6s_7_8
        case 1792:
            return .iPhone_XR
        case 1920, 2208:
            return .iPhones_6Plus_6sPlus_7Plus_8Plus
        case 2436:
            return .iPhones_X_XS
        case 2688:
            return .iPhone_XSMax
        default:
            return .unknown
        }
    }
}

答案 1 :(得分:1)

如果要根据设备增加高度比例,可以使用以下扩展名。

    extension NSLayoutConstraint {

        @IBInspectable var preciseConstant: CGFloat {
            get {
                return constant * UIScreen.main.scale
            }
            set {

                 //replace 567 with height of Device screen that you are used to initially design in story bored
                constant =  (newValue * UIScreen.main.bounds.size.height)  / 567
                //print(constant)
            }
        }
}

编写此扩展名后,您可以在特定约束的属性检查器中看到精确常数的选项。将相同的常数(30)放入precisionConstant。

enter image description here

运行该应用,您的组件高度将根据设备高度而增加