如何在 UITableViewCell 中垂直居中对齐 UIButton? (目标 C)

Posted

技术标签:

【中文标题】如何在 UITableViewCell 中垂直居中对齐 UIButton? (目标 C)【英文标题】:How to vertically center align UIButton in UITableViewCell? (Objective C) 【发布时间】:2013-10-01 23:11:15 【问题描述】:

我有一个自定义表格单元格,我想在左侧添加一个自定义 UIButton,在单元格内垂直居中。我尝试使用下面显示的代码来做到这一点,该代码位于我的自定义表格单元格实现中。

我正在尝试通过获取 self.frame 的高度并调整按钮的大小使其距离单元格的顶部和底部 5px 来实现垂直居中对齐。当我运行它时,我看到按钮出现在距离顶部 5px 处,但距离底部远得多(20px 左右)。

实现垂直对齐的正确方法是什么?

这是我在自定义表格单元格实现中的代码:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

  self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  if (self)
  
    [self setSelectionStyle:UITableViewCellSelectionStyleNone];

    // Create the audio button on the left side:
    self.audioButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.audioButton.frame = CGRectMake(5, 5, self.frame.size.height - 10, self.frame.size.height - 10);
    [self.audioButton setImage:[UIImage imageNamed:@"ec-icon-speaker.png"] forState:UIControlStateNormal];
    [self.audioButton addTarget:self
                    action:@selector(playWordAudio)
          forControlEvents:UIControlEventTouchUpInside];
    [self.contentView addSubview:self.audioButton];

感谢您的任何建议,

埃里克

【问题讨论】:

【参考方案1】:

覆盖 UITableViewCell 的 layoutSubview 方法。

- (void)layoutSubviews

    [super layoutSubviews];
    self.audioButton.center = CGPointMake(self.audioButton.center.x, self.contentView.center.y);

【讨论】:

我真的很喜欢这个解决方案的优雅。将其添加到我的 layoutSubviews 覆盖中,效果很好!非常感谢。 (不幸的是,我还不能对你的答案投赞成票。)【参考方案2】:

您只需要设置与其中心相关的框架。即,

CGFloat height = self.frame.size.height - 10;
self.audioButton.frame = CGRectMake(self.contentView.frame.size.height/2-height/2, 5,height , height);

【讨论】:

啊,对了——这里的诀窍是查看 self.contentView.frame 而不是 self.frame。谢谢!

以上是关于如何在 UITableViewCell 中垂直居中对齐 UIButton? (目标 C)的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableViewCell 中垂直居中右细节 UILabel

Autolayout - 当一个视图具有动态高度时,在 UITableViewCell 中垂直居中两个视图

UITableViewCell 布局问题

如何让DIV水平和垂直居中

如何在垂直线性布局中垂直居中视图?

span内图片元素如何垂直居中