出现键盘时向上移动 UIView

Posted

技术标签:

【中文标题】出现键盘时向上移动 UIView【英文标题】:Move UIView up when keyboard appears 【发布时间】:2016-03-01 11:46:19 【问题描述】:

好的,我已经完成了几乎所有关于 SO 和教程的问题。我现在可以将我的UIView 向上移动,以便在输入时可见。但是问题是,如果UITextField 被键盘覆盖,我想移动UIView ONLY,因为如果不是,那么移动UIView 就没有意义了。到目前为止我的代码:

- (void)viewDidLoad 

    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self                                                selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];


#pragma mark - keyboard movements
- (void)keyboardWillShow:(NSNotification *)notification

    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    [UIView animateWithDuration:0.3 animations:^
        CGRect f = self.view.frame;
        f.origin.y = -keyboardSize.height;
        self.view.frame = f;
    ];


-(void)keyboardWillHide:(NSNotification *)notification

    [UIView animateWithDuration:0.3 animations:^
        CGRect f = self.view.frame;
        f.origin.y = 0.0f;
        self.view.frame = f;
    ];

任何帮助将不胜感激,谢谢。

【问题讨论】:

您是否在为文本文件和键盘而苦恼?使用github.com/michaeltyson/TPKeyboardAvoiding @TKutal 如果您使用自动布局,则此链接可能对您有所帮助.. ***.com/questions/31356293/… 【参考方案1】:

要检查 UITextField 是否被键盘覆盖,您可以执行以下操作:

- (void)keyboardWillShow:(NSNotification *)notification 
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    if (myTextField.frame.origin.y + myTextField.frame.size.height > [UIScreen mainScreen].bounds.size.height - keyboardSize.height) 
        // textfield is covered by keyboard
        [UIView animateWithDuration:0.3 animations:^
            CGRect f = self.view.frame;
            f.origin.y = -keyboardSize.height;
            self.view.frame = f;
        ];
    

【讨论】:

你能帮我解决textField的'y'位置吗,问题是如果我从屏幕顶部添加一个约束,键盘会出现在文本字段上,如果我添加一个底部约束键盘和文本字段之间的空间与约束的空间相同。 同样在if 条件下,我如何才能对所有UITextFields 执行检查,而不仅仅是'myTextField' 任何想了解更多的人,请查看***.com/questions/35738921/…

以上是关于出现键盘时向上移动 UIView的主要内容,如果未能解决你的问题,请参考以下文章

SWIFT:用键盘向上移动的UIView,在初始移动后移动非常奇怪,不会回落

出现键盘时无法上移自定义 UIView

iOS 8 出现键盘时 UIView 上移 |问题

显示键盘时,自定义 UIView 正在向上推部分内容

在 UITextView 编辑时移动 UIView

使用键盘下的UITextFields向上移动UIView