iOS: Аксессуар для ввода с клавиатуры отображает неправильную ориентацию при запуске приложения в альбомном режиме
В моем приложении для iOS большинство экранов находятся в портретном режиме, и у нас есть только один экран для показа в ландшафтном режиме. Поэтому, когда я запускаю приложение в альбомном режиме, тогда рамка вспомогательного представления устанавливается в соответствии с альбомным режимом, в то время как другие компоненты устанавливаются в портретном режиме, так что вспомогательное представление отделяется от клавиатуры во всем приложении., Эта проблема возникла после iOS 11 и более того, в iPhone X проблема не воспроизводима.
- (id)initWithItems:(NSArray *)items {
self = [self initWithFrame:CGRectMake(0.f, 0.f, 0.f, 44.f)];
if (self) {
// Set style
if ([ThemeManager currentThemeID] == LightThemeID) {
self.borderMask = BorderTop|BorderBottom;
self.borderWidth = 1.f;
self.borderColor = [UIColor lightGrayColor];
self.backgroundColor = [UIColor colorWithRed:217.f/255.f green:220.f/255.f blue:226.f/255.f alpha:1.f];
}
else {
UIToolbar *fakeToolbar = [[UIToolbar alloc] initWithFrame:self.bounds];
[fakeToolbar setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];
[fakeToolbar setBarStyle:UIBarStyleBlackOpaque];
[self addSubview:fakeToolbar];
}
// Create scroll view
_scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
[_scrollView setShowsHorizontalScrollIndicator:NO];
[_scrollView setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];
[self addSubview:_scrollView];
// Add snippet buttons to scroll view
CGFloat nextButtonX = 7.f;
for (NSString *item in items) {
UIButton *itemButton = [self snippetButtonWithTitle:item];
CGRect frame = itemButton.frame;
frame.origin.x = nextButtonX;
itemButton.frame = frame;
nextButtonX += frame.size.width + 7.f;
[_scrollView addSubview:itemButton];
}
// Set scroll view content size
[_scrollView setContentSize:CGSizeMake(nextButtonX, 44.f)];
}
return self;
}
- (BOOL)enableInputClicksWhenVisible {
return YES;
}
- (UIButton *)snippetButtonWithTitle:(NSString *)title {
UIButton *button = [InputAccessorySnippetBarButton buttonWithType:UIButtonTypeCustom];;
[button setTitle:title forState:UIControlStateNormal];
UIFont *buttonFont;
CALayer *buttonLayer = button.layer;
// Set button font
[button.titleLabel setFont:buttonFont];
// Set the button's frame width to fit the content
CGFloat titleWidth = [title sizeWithAttributes:@{NSFontAttributeName:buttonFont}].width;
button.frame = CGRectMake(0.f,
(44.f - 30.f) / 2,
titleWidth + 20.f,
30.f);
// Set button action
[button addTarget:self
action:@selector(buttonTapped:)
forControlEvents:UIControlEventTouchUpInside];
return button;
}
- (void)buttonTapped:(id)sender {
[[UIDevice currentDevice] playInputClick];
UIButton *button = sender;
id<InputAccessorySnippetBarDelegate> strongDelegate = self.delegate;
[strongDelegate snippetBar:self
tappedItemWithTitle:[button titleForState:UIControlStateNormal]];
}