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

时间:2014-01-01 09:56:35

标签: ios objective-c uicollectionview frame uicollectionviewcell

我正在制作自定义CollectionViewCell,到目前为止一直很好。

<小时/> 设置:

  1. UICollectionView上使用UIViewController的故事板。
  2. 创建了一个UICollectionViewCell,其中包含单元格的布局详细信息。
  3. 单元格中所需的对象在故事板中设置。
  4. <小时/> 的目的

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

    <小时/> 的问题

    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,那么它确实有效。

    <小时/> 的问题

    当旋转设备时,我需要调整上面的代码以便单元格获取帧更改? 其他一切都有效 - 这是唯一的问题。 一旦我完成这项工作,我就可以生产其余的细胞。

1 个答案:

答案 0 :(得分:0)

使用自动布局时,不应设置任何帧。相反,您应该调整约束,或者在某些情况下,删除一些约束并添加其他约束。最简单的方法是将IBOutlet设置为IB中的约束,然后在代码中修改它们的常量值(具体而言,常量值是可以更改的约束的唯一参数)。从您的问题中不清楚,您尝试更改哪个帧参数,但是说您有一个名为leftCon的约束的出口,您可以像这样更改它,

self.leftCon.constant = 20;