相关疑难解决方法(0)

为什么我们不能直接改变UIView框架的大小或来源?

对于那些了解这一点的人来说听起来可能非常愚蠢,但我对iOS很陌生.我想知道,为什么我们不能修改原点或大小,或者可能是UIView框架的这些属性的x,y或高度宽度?

frame是一个CGRect结构,原点和大小又是CGPoint和CGSize结构.当我们可以访问它们时,为什么我们无法修改它们?

在CGRect中没有这样的东西,我们可以修改它的属性,所以为什么我们不能用于框架或边界.

objective-c ios

14
推荐指数
2
解决办法
1万
查看次数

键盘可见时更改Y原点时的奇怪UIView行为

语境:

我有一个包含UITextView的UIView.我想在键盘可见时移动UIView.所以我的想法是改变Y的位置.

问题:

有时,当键盘仍然可见时,UIView会返回其初始Y位置.即使我关注输入,它也不会再回来了.我真的不知道为什么.

插图(gif):

https://d17oy1vhnax1f7.cloudfront.net/items/2K0z3P1j1x2f0X2X1B2v/ci.gif

PS:键盘在Gif中出现3次.它循环,所以很难区分结束.

我做了什么,首先我添加了通知观察员:

NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillChangeFrame), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)
Run Code Online (Sandbox Code Playgroud)

然后我定义了键盘切换处理程序:

func keyboardWillChangeFrame(notification: NSNotification) {

    let info = notification.userInfo!
    let keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue

    self.keyboardInfo["isVisible"] = self.view.frame.size.height - keyboardFrame.origin.y != 0
    self.keyboardInfo["height"] = keyboardFrame.size.height
    self.keyboardInfo["animationDuration"] = info[UIKeyboardAnimationDurationUserInfoKey] as! Double
    self.keyboardInfo["animationCurve"] = info[UIKeyboardAnimationCurveUserInfoKey] as! UInt

    if self.keyboardInfo["isVisible"] as! Bool {
        self.moveCommentInputUp()
    } else {
        self.moveCommentInputDown()
    }

}
Run Code Online (Sandbox Code Playgroud)

之后,我已经定义了在注释输入视图中向上/向下移动的方法:

func moveCommentInputUp() {

    print("Moving up... ", self.commentFormView.frame.origin.y, " to ", self.view.frame.size.height - (self.keyboardInfo["height"] …
Run Code Online (Sandbox Code Playgroud)

uiview ios swift

5
推荐指数
1
解决办法
683
查看次数

标签 统计

ios ×2

objective-c ×1

swift ×1

uiview ×1