无法更改自定义UICollectionViewCell中UILabel的框架



我正在制作一个自定义CollectionViewCell,到目前为止还不错。


设置:

  1. UIViewController上具有UICollectionView的情节提要
  2. 创建了一个UICollectionViewCell,上面有单元格的布局详细信息
  3. 在情节提要中设置了单元格中所需的对象


目标

  • 要在设备为纵向或横向时提供不同的布局


问题

1) 我认为这与Autolayout有关,但我不想关闭它,因为我需要它来完成项目的其余部分。

2) 请参考以下代码:

- (void)layoutSubviews
{
[super layoutSubviews];
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];
if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
_collectionLabel.frame = CGRectMake(20, 100, 280, 40);
_collectionLabel.textColor = [UIColor blueColor];
_collectionLabel.backgroundColor = [UIColor clearColor];
}
else
{
_collectionLabel.frame = CGRectMake(20, 20, 280, 40);
_collectionLabel.textColor = [UIColor redColor];
_collectionLabel.backgroundColor = [UIColor clearColor];
}
}

现在,除了UILabel的帧没有改变之外,上面的所有代码都工作了。如果我为项目关闭Autolayout,那么它确实有效。


问题

当设备旋转时,我需要根据上面的代码对单元格进行什么调整才能获取帧更改?其他一切都有效——这是唯一的问题。一旦我完成了这项工作,我就可以生产细胞的其余部分。

使用自动布局时,不应设置任何框架。相反,您应该调整约束,或者在某些情况下,删除一些约束并添加其他约束。最简单的方法是将IBOutlets设置为IB中的约束,然后在代码中修改它们的常数值(具有讽刺意味的是,常数值是约束中唯一可以更改的参数)。从你的问题中还不清楚,你试图改变哪一个帧参数,但如果你有一个名为leftCon的约束出口,你会这样改变它,

self.leftCon.constant = 20;

最新更新