ios - 使用 viewWillTransition 更改方向时更改 UILabel.frame

标签 ios swift xcode uibutton

我以编程方式在我的 UIInputViewController 的 viewDidLoad() 中创建了一组按钮。当方向从横向变为纵向时,我试图更改这些按钮的大小,反之亦然。

我正在尝试使用

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)

但是当我使用与在 viewDidLoad() 中创建按钮时相同的代码,仅更改 UIlabel.frame 以适应新的高度和宽度时, View 不会更新。我是否必须先移除按钮并从头开始加载它们,还是有其他方法可以做到这一点?

下面是函数的完整代码。

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    let width = screensize.width
    var height = CGFloat(141)
    let sizey = screensize.height

    switch sizey {
    case 1366:
        height = CGFloat(383-15)
    case 1112:
        height = CGFloat(320-15)
    case 812:
        height = CGFloat(141-15)
    case 1024:
        height = CGFloat(320-15)
    case 736:
        height = CGFloat(226-15)
    case 667:
        height = CGFloat(216-15)
    case 568:
        height = CGFloat(216-15)
    case 768:
        height = CGFloat(420-15)
    default:
        height = CGFloat(141-15)
    }

    connection.frame = CGRect(x: 0,         y: 0, width: width/2,     height: 15)
    serialNum.frame = CGRect( x: width/2,   y: 0, width: width/2,     height:15)

    plus.frame = CGRect(x:0,              y: 15,            width: width/5,height: height/4)
    minus.frame = CGRect(x:0,             y: height/4+15,   width: width/5,height: height/4)
    left.frame = CGRect(x:0,              y: height/2+15,   width: width/5,height: height/4)
    nextKeyboardButton.frame = CGRect(x:0,y: 3*height/4+15, width: width/5,height: height/4)

    num1.frame = CGRect(x:width/5,    y: 15,            width: width/5,height: height/4)
    num4.frame = CGRect(x:width/5,    y: height/4+15,   width: width/5,height: height/4)
    num7.frame = CGRect(x:width/5,    y: height/2+15,   width: width/5,height: height/4)
    comma.frame = CGRect(x:width/5,   y: 3*height/4+15, width: width/5,height: height/4)

    num2.frame = CGRect(x:width*2/5,y: 15,            width: width/5,height: height/4)
    num5.frame = CGRect(x:width*2/5,y: height/4+15,   width: width/5,height: height/4)
    num8.frame = CGRect(x:width*2/5,y: height/2+15,   width: width/5,height: height/4)
    num0.frame = CGRect(x:width*2/5,y: 3*height/4+15, width: width/5,height: height/4)


    num3.frame = CGRect(x:width*3/5,y: 15,            width: width/5,height: height/4)
    num6.frame = CGRect(x:width*3/5,y: height/4+15,   width: width/5,height: height/4)
    num9.frame = CGRect(x:width*3/5,y: height/2+15,   width: width/5,height: height/4)
    period.frame = CGRect(x:width*3/5,y: 3*height/4+15, width: width/5,height: height/4)

    back.frame = CGRect(x:width*4/5,      y: 15,            width: width/5,  height: height/4)
    spaceBar.frame = CGRect(x: width*4/5, y: height/4+15,   width: width/5,  height: height/4)
    right.frame =
        CGRect(x: width*4/5,    y: height/2+15,   width: width/5,  height: height/4)
    returnKey.frame = CGRect(x:width*4/5, y: height*3/4+15, width: width/5,  height: height/4)


    self.view.addSubview(spaceBar)
    self.view.addSubview(num1)
    self.view.addSubview(num2)
    self.view.addSubview(num3)
    self.view.addSubview(num4)
    self.view.addSubview(num5)
    self.view.addSubview(num6)
    self.view.addSubview(num7)
    self.view.addSubview(num8)
    self.view.addSubview(num9)
    self.view.addSubview(num0)
    self.view.addSubview(plus)
    self.view.addSubview(minus)
    self.view.addSubview(back)
    self.view.addSubview(left)
    self.view.addSubview(right)
    self.view.addSubview(period)
    self.view.addSubview(comma)
    self.view.addSubview(nextKeyboardButton)
    self.view.addSubview(returnKey)

最佳答案

您需要使用在“viewWillTransition”方法中获得的“size”参数来设置新的“width”和“sizey”属性,而不是“screensize”。

关于ios - 使用 viewWillTransition 更改方向时更改 UILabel.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56155262/

相关文章:

ios - 通过比较字符串从Xcode中的NSArray中选择indexOfObject

ios - 获取部分名称

ios - 如何快速重新显示来自 subview Controller 的解析登录

ios - SwiftUI 中 $varName 和 _varName 有什么区别

ios - ios 9.0 无法添加谷歌登录

objective-c - 在 xcode 中用 "{"替换 "(newline){"的正则表达式

ios - AFNetworking 单元测试

ios - subview 的位置不是我所期望的

ios - 将多个查询结果添加到数组中

xcode - 如何将文件名从 finder 传递到我的 OS X 应用程序