在自定义 UITableViewCell 中设置 UIButton 的 contentMode 没有效果

Posted

技术标签:

【中文标题】在自定义 UITableViewCell 中设置 UIButton 的 contentMode 没有效果【英文标题】:Setting contentMode of UIButton within custom UITableViewCell shows no effect 【发布时间】:2016-02-25 18:58:42 【问题描述】:

我正在- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 中创建 mu 自定义 UITableViewCells,如下所示:

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil];
CustomTableViewCell *cell = [topLevelObjects objectAtIndex:0];

使用 InterfaceBuilder,我已将此单元格的 xib 中包含的两个按钮的内容模式设置为 AspectFit,但它们的显示方式不保留纵横比。所以我在这个类中添加了以下代码:

- (id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
    NSLog(@"running initwithstyle");
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        [[deleteButton imageView] setContentMode:UIViewContentModeScaleAspectFit];
        [[saveButton imageView] setContentMode:UIViewContentModeScaleAspectFit];
    
    return self;

这个函数甚至没有运行。我也尝试子类化displayLayer,但显然也没有被调用。我应该继承什么函数,以便我可以在我的 Xib 中设置按钮的内容模式,为什么在 Xib 中设置内容模式没有效果?

【问题讨论】:

您可以在上面节省一行代码。而不是创建一个数组,然后在索引 0 处获取对象,只需执行 [[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil] firstObject] 【参考方案1】:

尝试将代码放入-(void)awakeFromNib。它没有在 initWithStyle:reuseIdentifier: 中执行的原因是因为这不是您创建自定义单元格的方式。

我认为在 xib 中设置内容模式没有效果的原因是因为那是在按钮上而不是在按钮的图像视图上设置内容模式。

【讨论】:

以上是关于在自定义 UITableViewCell 中设置 UIButton 的 contentMode 没有效果的主要内容,如果未能解决你的问题,请参考以下文章

在自定义单元格中设置自定义附件类型

UIImageView 未在自定义 UITableViewCell 中显示图像

UITableViewCell 内的 UIScrollView - 水平滚动

在自定义对话框中设置文本视图

在自定义 HttpClientHandler 中设置 allowautoredirect=false

使用依赖属性在自定义类中设置属性