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]];
}

0 ответов

Другие вопросы по тегам