iOS确定键盘重叠视图

时间:2017-05-18 06:01:23

标签: ios swift3 keyboard uitextfield uitextview

在我的 swift 3 项目中,我在屏幕上使用 UITextFields UITextViews 以及键盘 strong>键盘中显示其中一些重叠,而不同设备的重叠视图会有所不同。例如, iPhone SE 中重叠的文本字段可能不会与 iPhone 7 plus 重叠。

因此,要向上滚动视图,如何确定键盘重叠的视图。有没有办法做到这一点。

我试图确定textView的位置,以确定它与键盘重叠的天气。但它为更小和更大的设备提供了相同的值。以下是我的所作所为。

print(" textfiled position : \(notesTextView.frame)")
print(" X position : \(notesTextView.frame.origin.x)")
print(" Y position : \(notesTextView.frame.origin.y)")
print(" width : \(notesTextView.frame.size.width)")
print(" Height : \(notesTextView.frame.size.height)")
print("Keyboard Height : \(keyboardHeightValue)")

这些是我得到的价值。

无论UITextView在屏幕的哪个位置,无论我在触摸UITextView时检查哪个设备都返回相同的108.0 Y值

 textfiled position : (23.0, 108.0, 274.0, 150.0)
 X position : 23.0
 Y position : 108.0
 width : 274.0
 Height : 150.0
 Keyboard Height : 297.0
 max Height : 568.0
 Screen Height : 320.0
 Screen Height : 568.0

我认为我获取文本视图坐标的方式可能不对,因为在我的情况下我需要获取屏幕的坐标。在这种情况下,我已经采取了视图的位置。但是,由于我使用的是表格视图控制器,因此我无法使用下面的代码段。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if let touch = touches.first {
            let position = touch.location(in: self.notesTextView)
            location = touch.location(in: self.notesTextView)
            print(position.x)
            print(position.y)
        }
    }

如何获得视图的绝对协调。

谢谢和问候!

1 个答案:

答案 0 :(得分:0)

使用Objective C你可以使用这段代码,我没有使用Swift的经验,所以你可以改变语法,它在目标c中对我来说很好。 keyBoardAppeared:键盘出现时会发出通知。

- (void)textFieldDidBeginEditing:(UITextField *)textField{

  activeField = textField; // Where activeField is UIView
}


-(void)keyBoardAppeared:(NSNotification *)note{

    NSDictionary *info = [note userInfo];
    keyBoardSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] 
    CGRectValue].size;

    CGRect subViewPosition = [self.view convertRect:activeField.frame 
    fromView:[activeField superview]];

    CGRect aRect = self.view.frame;
    aRect.size.height -= keyBoardSize.height;

   if (!CGRectContainsPoint(aRect, subViewPosition.origin) ) {

    CGPoint newOffset = CGPointMake(0, subViewPosition.origin.y - 
    keyBoardSize.height);

    [mainScrollView setContentOffset:newOffset];
}}