iOS自定义键盘扩展自动布局

时间:2018-11-03 21:39:24

标签: ios objective-c

我正在开发自定义键盘,我只想使用UICollectionView作为内容。 CollectionView应该填充键盘视图的位置(中心x和y,宽度和高度可用空间)。

我的问题是,如果我旋转设备,则收集视图将不会调整大小。

我尝试了布局约束,在viewWillTransitionToSize上调整视图的大小,但是它不起作用。谁能给我一个提示或告诉我一种解决方法?

1 个答案:

答案 0 :(得分:1)

自动布局应在添加约束之前将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);
}];

顺便说一句,自动布局将使用更多的内存,然后自己计算帧。由于iOS键盘扩展具有非常苛刻的内存使用限制(大约40mb取决于设备)。如果您的键盘在处理其他事情时会占用大量内存,则建议您不要使用自动布局。