簡體   English   中英

iOS:UIView的來源y在iOS 9上未更改

[英]iOS: UIView origin y not changing on iOS 9

我正在嘗試在顯示keyboard時設置self.mainView.frame.origin.y 它可以在iOS 11上正常運行,但不能在iOS 9

這是我的代碼:

    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        print("=== textFieldShouldBeginEditing 1 \(self.mainView.frame.origin.y) ")
        self.mainView.frame.origin.y -= 150
        self.mainView.setNeedsLayout()
        self.mainView.layoutIfNeeded()
        print("=== textFieldShouldBeginEditing 2 \(self.mainView.frame.origin.y) ")
        return true
    }



    internal func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        print("=== textFieldShouldReturn 1 \(self.mainView.frame.origin.y) ")
        self.mainView.frame.origin.y = self.normalMainViewOriginY
        textField.endEditing(true)
        print("=== textFieldShouldReturn 2 \(self.mainView.frame.origin.y) ")
        return true
    }

viewDidLoad()

self.normalMainViewOriginY = self.mainView.frame.origin.y

我也使用NSNotification測試了相同的想法,但在iOS 9遇到了相同的問題

這些是打印輸出:

iOS 9:

=== normalMainViewOriginY:243.0(來自viewDidLoad()

=== textFieldShouldBeginEditing 1:208.5

=== textFieldShouldBeginEditing 2:208.5

=== textFieldShould返回1:208.5

=== textFieldShouldReturn 2:243.0

iOS 11:

=== normalMainViewOriginY:243.0(來自viewDidLoad()

=== textFieldShouldBeginEditing 1:208.5

=== textFieldShouldBeginEditing 2:58.5

=== textFieldShould返回1:58.5

=== textFieldShouldReturn 2:243.0

問題在於,更改框架不會影響下划線的布局約束,因此請嘗試使用約束不會失敗,例如您將mainView的頂部約束作為mainViewTopCon

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    print("=== textFieldShouldBeginEditing 1 \(self.mainView.frame.origin.y) ")
    self.mainViewTopCon.constant -= 150
    self.mainView.layoutIfNeeded()
    print("=== textFieldShouldBeginEditing 2 \(self.mainView.frame.origin.y) ")
    return true
}

internal func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    print("=== textFieldShouldReturn 1 \(self.mainView.frame.origin.y) ")
    self.mainViewTopCon.constant = 0 // or value in IB that you set initally 
    self.mainView.layoutIfNeeded()
    textField.endEditing(true)
    print("=== textFieldShouldReturn 2 \(self.mainView.frame.origin.y) ")
    return true
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM