iOS7 上 UICollectionViewCell 中的 UIImageView 自动布局问题,但在 iOS8 上没问题

Posted

技术标签:

【中文标题】iOS7 上 UICollectionViewCell 中的 UIImageView 自动布局问题,但在 iOS8 上没问题【英文标题】:UIImageView autolayout issue in UICollectionViewCell on iOS7 but on iOS8 it's ok 【发布时间】:2014-12-25 08:55:22 【问题描述】:

在 ImageView 中减小图像大小时遇到​​问题。 在 CollectionViewCell 中有带有约束的 ImageView:两个水平空间和两个垂直空间。 第一个屏幕是ios7,第二个屏幕是iOS8。

ImageURL 它是通过 URL 加载图像的自定义类,它可以正常工作,还可以设置一个类似的图像

    _clothesImageView.image = [UIImage imageNamed:@"imageName.png"];

    - (void)configCellWithClothesModel:(ClothesModel *)clothesModel
    
        [_clothesImageView setImageURL:[NSURL URLWithString:clothesModel.imageURL]];
    

衣服模型:

- (instancetype)initWithDict:(NSDictionary *)dict

    self = [super init];
    if (self)
    
        _isShop = @(YES);
        self.title = [self checkNullAndNill:dict[kTitle]];
        self.info = [self checkNullAndNill:dict[kDescription_Short]];
        self.artNumber = [self checkNullAndNill:dict[kArtNumber]];
        self.afLink = [self checkNullAndNill:dict[kDeeplink1]];
        self.imageURL = [self checkNullAndNill:dict[kImg_url]];
        _isCart = @(NO);
    
    return self;



//==============================================================================


- (id)checkNullAndNill:(id)object

    if (object == nil)
        return @"";
    else if (object == [NSNull null])
        return @"";
    else
        return object;



//==============================================================================


- (UICollectionViewCell *)configCellWithType:(NSString *)type collectionView:(UICollectionView *)collectionView indexPath:(NSIndexPath *)indexPath

    ClothesCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:[type isEqualToString:@"Outfits"] ? @"CellOutfits" : @"Cell" forIndexPath:indexPath];
    [cell configCellWithClothesModel:self];
    return cell;



//==============================================================================

【问题讨论】:

给我们一些 ClothesModel 类的代码。尤其是图片部分。 放一些代码。你是在 iPhone 5 还是 iPhone 6 上运行代码? @hris.to 完成。自定义类工作正常。 @AshishKakkad iPhone 6 不支持 iOS7。我在所有装有 iOS7 的设备上运行并遇到同样的问题。 我认为尝试 [imgView.layer setMaskToBound:YES] 如果它不起作用,然后尝试 [imgView setContentMode:] 在 contentMode 中有 UIViewContentModeScaleAspectFill、UIViewContentModeScaleAspectFit 和 UIViewContentModeScaleAspectFit 等等,但是这三个之一可能会有所帮助你 【参考方案1】:

在 Xcode6 中,界面构建器不会向您显示单元格的内容视图。 CollectionViewCell 在 iOS7 中具有内容视图,其框架设置为默认值 (0,0,50,50)。 您需要在 CollectionViewCell 子类中添加此代码,因此 contentView 将自行调整大小

- (void)awakeFromNib

   [super awakeFromNib];
   self.contentView.frame = self.bounds;
   self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

【讨论】:

很好的答案!帮了我很多。你让我想起了我的奶奶,当我需要帮助时,她给了我解决方案!【参考方案2】:

这实际上取决于自动布局设置。UIImageViews 通常根据其固有内容大小设置它们的大小,该大小设置为它们所托管的图像的大小。 如果您的集合视图单元格没有足够数量的约束,您所看到的可能取决于不同 iOS 上的自动布局引擎实现。 还要按照 cmets 中的说明检查图像视图的内容模式。

【讨论】:

我已经删除了所有的限制,它在 iOS7 上可以工作,但是当我在 iPhone 6 或 6+ 上运行时,图像并没有增加尺寸。 你不需要去掉约束,但要正确设置 例如,假设图像视图应该在整个单元格内容视图中延伸。图像视图的正确约束是前导、尾随、顶部和底部,常量等于 0。 是的,我做到了。那是以前。

以上是关于iOS7 上 UICollectionViewCell 中的 UIImageView 自动布局问题,但在 iOS8 上没问题的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS7 上更改 UISwitch 的 onTintColor?

UIButton没有在ios7上注册

iOS7 上 NavBar 背景图像的奇怪外观

iOS7上tableview单元格中的文本字段崩溃

IOS7上UINavigationBar下的UIView

在 iOS7 设备上测试使用 SDK6 开发的应用