Я работаю над пользовательской клавиатурой. все работает отлично, но когда я поворачиваю клавиатуру в ландшафтный режим, клавиатура загружается правильно, но она занимает высоту клавиатуры в портретном режиме.
Вот моя попытка:
@interface KeyboardViewController ()
{
CGFloat expandedHeight ;
BOOL isPortrait;
}
@property(strong,nonatomic)keyboardLayout *ObjKeyLayout;
- (void)updateViewConstraints {
[super updateViewConstraints];
[self updateCustomHeight];
}
-(void)updateCustomHeight
{
if (self.heightConstraint != nil) {
[self.view removeConstraint:self.heightConstraint];
[self.view layoutIfNeeded];
}
if(isPortrait)
{
expandedHeight = 258;
}
else
{
expandedHeight = 156;
}
self.heightConstraint = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant: expandedHeight];
[self.view addConstraint:self.heightConstraint];
[self.view layoutIfNeeded];
}
- (void)deviceOrientationDidChange:(NSNotification *)notification
{
NSLog(@"key");
if([UIScreen mainScreen].bounds.size.width < [UIScreen mainScreen].bounds.size.height){
//Keyboard is in Portrait
isPortrait=YES;
isp=YES;
[self LoadKeyboardview];
[self updateCustomHeight];
}
else{
isPortrait=NO;
[self LoadKeyboardview];
[self updateCustomHeight];
//Keyboard is in Landscape
}
-(void)initiateOrientation
{
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
if([UIScreen mainScreen].bounds.size.width < [UIScreen mainScreen].bounds.size.height){
//Keyboard is in Portrait
isPortrait=YES;
[self LoadKeyboardview];
}
else{
isPortrait=NO;
[self LoadKeyboardview];
//Keyboard is in Landscape
}
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
if([UIScreen mainScreen].bounds.size.width < [UIScreen mainScreen].bounds.size.height){
//Keyboard is in Portrait
isPortrait=YES;
[self LoadKeyboardview];
[self updateCustomHeight];
}
else{
isPortrait=NO;
[self LoadKeyboardview];
[self updateCustomHeight];
//Keyboard is in Landscape
}
}
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if([UIScreen mainScreen].bounds.size.width < [UIScreen mainScreen].bounds.size.height){
//Keyboard is in Portrait
isPortrait=YES;
[self LoadKeyboardview];
[self updateCustomHeight];
}
else{
isPortrait=NO;
[self LoadKeyboardview];
[self updateCustomHeight];
}
}
- (NSLayoutConstraint*)findViewHeightConstraint {
NSArray *constraints = self.view.superview.constraints;
for ( NSLayoutConstraint *constraint in constraints ) {
if ( constraint.firstItem == self.view
&& constraint.firstAttribute == NSLayoutAttributeHeight )
return constraint;
}
[self updateCustomHeight];
return nil;
}
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
// Update height when rotating
[self updateCustomHeight];
}
РЕДАКТИРОВАТЬ: портретный режим
РЕДАКТИРОВАТЬ:-
@implementation KeyboardViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Perform custom initialization work here
self.portraitHeight = 256;
self.landscapeHeight = 162;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil];
[self copyDatabaseIfNeeded];
NumKey=[[NSArray alloc]initWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"0", @"-", @"/", @":", @";", @"(", @")", @"$", @"&", @"@", @"\"", @".", @",", @"?", @"!",@"'",@"^", nil];
arrAlphabet=[[NSArray alloc]initWithObjects:@"q", @"w", @"e", @"r", @"t", @"y", @"u", @"i", @"o", @"p", @"a", @"s", @"d", @"f", @"g", @"h", @"j", @"k", @"l", @"z", @"x", @"c", @"v", @"b",@"n",@"m", nil];
arrKeyImages=[[NSArray alloc]initWithObjects:@"Q_key.png", @"W_key.png", @"E_key.png", @"R_key.png", @"T_key.png", @"Y_key.png", @"U_key.png", @"I_key.png", @"O_key.png", @"P_key.png", @"A_key.png", @"S_key.png", @"D_key.png", @"F_key.png", @"G_key.png", @"H_key.png", @"J_key.png", @"K_key.png", @"L_key.png", @"Z_key.png", @"X_key.png", @"C_key.png", @"V_key.png", @"B_key.png",@"N_key.png",@"M_key.png", nil];
keyIpad=[[NSArray alloc]initWithObjects:@"Q_Land_key.png", @"W_Land_key.png", @"E_Land_key.png", @"R_Land_key.png", @"T_Land_key.png", @"Y_Land_key.png", @"U_Land_key.png", @"I_Land_key.png", @"O_Land_key.png", @"P_Land_key.png", @"A_Land_key.png", @"S_Land_key.png", @"D_Land_key.png", @"F_Land_key.png", @"G_Land_key.png", @"H_Land_key.png", @"J_Land_key.png", @"K_Land_key.png", @"L_Land_key.png", @"Z_Land_key.png", @"X_Land_key.png", @"C_Land_key.png", @"V_Land_key.png", @"B_Land_key.png",@"N_Land_key.png",@"M_Land_key.png", nil];
arrspecialImageKey=[[NSArray alloc]initWithObjects:@"1_key.png", @"2_key.png", @"3_key.png", @"4_key.png", @"5_key.png", @"6_key.png", @"7_key.png", @"8_key.png", @"9_key.png", @"0_key.png", @"desh_key.png", @"slash.png", @"shift_shemi.png", @"semi.png", @"left_brecket.png", @"right_breacket.png", @"doller_key.png", @"and_key.png", @"AtTherate.png", @"dobleComma.png", @"dot.png",@"singel_comma.png",@"question_mark.png", @"exemlaration.png", @"single_uppar_comma.png",@"upparArrow.png", nil];
arrSpecialIpad=[[NSArray alloc]initWithObjects:@"1_Land_key.png", @"2_Land_key.png", @"3_Land_key.png", @"4_Land_key.png", @"5_Land_key.png", @"6_Land_key.png", @"7_Land_key.png", @"8_Land_key.png", @"9_Land_key.png", @"0_Land_key.png", @"Dash_Land_key.png", @"slash_Land_key.png", @"shif_semi_Land_key", @"semi_Land_key", @"left_brecket_Land_key.png", @"right_Land_key.png", @"doller_Land_key.png", @"and_Land_key.png", @"attherate_Land_key.png", @"dobblecomma_Land_key", @"dot_Land_key.png",@"comma.png",@"question.png", @"exemeleter.png", @"uppar_comma.png",@"upArrow.png", nil];
self.nextKeyboardButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.nextKeyboardButton setTitle:NSLocalizedString(@"Next Keyboard", @"Title for 'Next Keyboard' button") forState:UIControlStateNormal];
[self.nextKeyboardButton sizeToFit];
self.nextKeyboardButton.translatesAutoresizingMaskIntoConstraints = NO;
[self.nextKeyboardButton addTarget:self action:@selector(advanceToNextInputMode) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.nextKeyboardButton];
self.nextKeyboardButton.hidden=YES;
NSLayoutConstraint *nextKeyboardButtonLeftSideConstraint = [NSLayoutConstraint constraintWithItem:self.nextKeyboardButton attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0];
NSLayoutConstraint *nextKeyboardButtonBottomConstraint = [NSLayoutConstraint constraintWithItem:self.nextKeyboardButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];
[self.view addConstraints:@[nextKeyboardButtonLeftSideConstraint, nextKeyboardButtonBottomConstraint]];
self.heightConstraint = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:self.portraitHeight];
// Perform custom UI setup here
}
- (void)deviceOrientationDidChange:(NSNotification *)notification
{
self.heightConstraint.constant=expandedHeight;
NSLog(@"key");
if([UIScreen mainScreen].bounds.size.width < [UIScreen mainScreen].bounds.size.height){
//Keyboard is in Portrait
isPortrait=YES;
isp=YES;
[self LoadKeyboardview];
[self updateCustomHeight];
}
else{
isPortrait=NO;
[self LoadKeyboardview];
[self updateCustomHeight];
}
- (NSLayoutConstraint*)findViewHeightConstraint {
NSArray *constraints = self.view.superview.constraints;
for ( NSLayoutConstraint *constraint in constraints ) {
if ( constraint.firstItem == self.view
&& constraint.firstAttribute == NSLayoutAttributeHeight )
return constraint;
}
// [self updateCustomHeight];
return nil;
}
self.heightConstraint.constant=expandedHeight
. Затем вам нужно пометить вид как нуждающийся в макете, используя[self.view setNeedsLayout]
, затем выполните[self.view layoutIfNeeded]
. - person Rory McKinnel   schedule 07.08.2015