Разрыв между Textarea и клавиатурой на IOS - PullRequest
0 голосов
/ 03 августа 2020

У меня возникла проблема с ios, когда при отображении клавиатуры весь пользовательский интерфейс выталкивался из представления. Затем я исправил это, используя одно из найденных здесь решений. Это решило проблему, но при появлении клавиатуры между текстовым полем и клавиатурой есть разрыв. Приложение, над которым я работаю, представляет собой гибридное приложение, которое в основном имеет вид angularJS, CSS и html. У меня нет знаний о цели C и о том, как она работает. Если бы кто-нибудь мог помочь мне решить эту проблему, это было бы большим подспорьем. Поделюсь снимком экрана, а также кодом цели - c, который я добавил, чтобы решить проблему смещения пользовательского интерфейса вверху. Поле комментариев улетает от клавиатуры.

Обычно, когда клавиатуры нет, поле комментариев всегда находится внизу и имеет свойство CSS position: fixed & bottom: 0. MainViewController.m

    @interface MainViewController ()
    @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
    @end
#define DEVICE_HEIGHT [[UIScreen mainScreen] bounds].size.height
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification
                                               object:self.view.window];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:self.view.window];
    
}

-(void)viewWillDisappear:(BOOL)animated

{

[super viewWillDisappear:animated];
    // unregister for keyboard notifications while not visible.

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:UIKeyboardWillShowNotification
                                                  object:self.view.window];

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:UIKeyboardWillHideNotification
                                                  object:self.view.window];
}

-(void)keyboardWillShow:(NSNotification *)noti

 {

    NSDictionary* userInfo = [noti userInfo];
    CGRect keyboardRect = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]
    CGRectValue];
    keyboardRect = [self.view convertRect:keyboardRect fromView:nil];

    CGRect viewFrame = self.view.frame;
    viewFrame.size.height = DEVICE_HEIGHT - CGRectGetHeight(keyboardRect);

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.1];
    [UIView setAnimationBeginsFromCurrentState:YES];
    self.view.frame = viewFrame;

    CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height
                           - self.view.bounds.size.height);
    [self.scrollView setContentOffset:bottomOffset animated:NO];

    [UIView commitAnimations];

}

-(void)keyboardWillHide:(NSNotification *)noti

 {

    NSDictionary* userInfo = [noti userInfo];
    CGRect keyboardRect = [[userInfo
                   objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue];

    keyboardRect = [self.view convertRect:keyboardRect fromView:nil];

    CGRect viewFrame = self.view.frame;
    viewFrame.size.height = DEVICE_HEIGHT;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.1];
    [UIView setAnimationBeginsFromCurrentState:YES];
    self.view.frame = viewFrame;
    [UIView commitAnimations];
}


- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

MainViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...