我创建了扩展UICollectionViewCell
的类,并在故事板中自定义了单元格。在单元格的initWithCoder
内,我修改了标签阴影。
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
self.artistNameLabel.font = [UIFont fontWithName:@"Montserrat-Regular" size:12];
self.artistNameLabel.layer.masksToBounds = NO;
self.artistNameLabel.shadowColor = [UIColor colorWithWhite:0 alpha:0.65];
self.artistNameLabel.layer.shadowOffset = CGSizeMake(0, 0);
self.artistNameLabel.layer.shadowOpacity = 1.0;
self.artistNameLabel.layer.shadowRadius = 2.0;
return self;
}
由于某些原因,即使在创建单元格时调用了init,也不会显示更改。
如果我将影子代码移动到-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
它显示正常,但显然这对重用来说不是很好。
答案 0 :(得分:3)
将其移至- (void)awakeFromNib
。这是一个更好的地方。
答案 1 :(得分:2)
在自定义单元格上设置一个名为updateUI
的公共方法,并在-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
方法中调用该方法。你可以在你的- (id)initWithCoder:(NSCoder *)aDecoder
方法中为你的集合视图单元格分配init,但为了让你的shadowRadius,shadowOpacity等生效,我推荐上述方法。
#pragma mark - Helpers
- (void)updateUI // Update data within alreay alloc inited UI elements
{
self.backgroundColor = [UIColor redColor];
self.myImageView.frame = self.contentView.frame;
self.myImageView.contentMode = UIViewContentModeScaleAspectFit;
}
- (void)setup // Alloc init UI elements
{
self.myImageView = [[UIImageView alloc] init];
[self.contentView addSubview:self.myImageView];
}
#pragma mark - Lifecycle Methods
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self setup];
}
return self;
}
答案 2 :(得分:0)
关于你的答案,我需要更多信息,但请检查下一步
1)您使用的是自定义UICollectionViewCell
吗?
2)方法
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
DomyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"DomyCell" forIndexPath:indexPath];