iOS Custom Keyboard Extension Autolayout - PullRequest
0 голосов
/ 04 ноября 2018

Я разрабатываю пользовательскую клавиатуру и хочу использовать только UICollectionView в качестве контента. CollectionView должен заполнять (по центру x и y, ширину и высоту доступное пространство) вида клавиатуры.

Моя проблема в том, что если я поверну устройство, размер коллекции не изменится.

Я пробовал ограничения макета, изменяя размер представления viewWillTransitionToSize, но это не работает. Кто-нибудь может дать мне подсказку или показать мне, как это сделать?

1 Ответ

0 голосов
/ 04 ноября 2018

Autolayout должен установить translatesAutoresizingMaskIntoConstraints в NO перед добавлением ограничения. Приведенный ниже код может сделать UICollectionView автоматическое расположение с равными краями.

- (void)viewDidLoad {
    [super viewDidLoad];

    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
    collectionView.translatesAutoresizingMaskIntoConstraints = NO;
    collectionView.backgroundColor = [UIColor redColor];
    [self.view addSubview:collectionView];

    //Adding layout constraint
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:collectionView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:collectionView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:collectionView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0.0]];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:collectionView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0.0]];
}

Кроме того, я рекомендую вам использовать Masonry для построения автопутешествия. В вашем случае вам просто нужно запустить приведенный ниже код, чтобы наложить ограничения.

[collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(self.view);
}];

Кстати, autolayout будет использовать больше памяти, чем вычислять фрейм самостоятельно. Поскольку расширение iOS Keyboard имеет очень жесткий лимит использования памяти (около 40 МБ зависит от вашего устройства). Если ваша клавиатура будет использовать много памяти для обработки других вещей, я предлагаю вам не использовать автоматическое расположение.

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