我正在开发一个自定义键盘,我只想使用一个 UICollectionView 作为内容。 CollectionView 应该填充(中心 x 和 y,宽度和高度可用空间)键盘 View 。
我的问题是,如果我旋转设备,则不会调整 Collection View 的大小。
我尝试了布局约束,调整了 viewWillTransitionToSize 上的 View 大小,但它不起作用。任何人都可以给我提示或告诉我完成此操作的方法吗?
最佳答案
在添加约束之前,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);
}];
顺便说一下,自动布局会比你自己计算框架使用更多的内存。由于 iOS 键盘扩展具有非常严格的内存使用限制(大约 40mb 取决于您的设备)。如果您的键盘在处理其他事情时会占用大量内存,我建议您不要使用自动布局。
关于iOS 自定义键盘扩展自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135748/