У меня возникла проблема с 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