【问题标题】:UILabel disappearing in UIButton subclassUILabel 在 UIButton 子类中消失
【发布时间】:2014-09-18 14:27:04
【问题描述】:

我创建了一个 UIButton 的子类,在触摸时插入了一个动画视图,并通过 layoutSubviews 更改了我的 UIImage 和 UILabel 的位置。现在,当我在情节提要中创建六个这样的子类 UIButton 并在我的设备上运行应用程序时,我得到以下信息:

4 个 UIButton 似乎可以正常工作,但 5 个及以上似乎总是会影响我的 UILabel。为什么右侧 UIButton 的 UILabel 丢失了?

我认为 layoutSubviews 中发生了一些奇怪的事情,但我看不到。该方法的代码如下:

- (void)layoutSubviews {

[super layoutSubviews];

CGRect imageFrame = self.imageView.frame;
imageFrame = CGRectMake(truncf((self.bounds.size.width - imageFrame.size.width) / 2), 40.0f, imageFrame.size.width, imageFrame.size.height);
self.imageView.frame = imageFrame;


CGRect labelFrame = self.titleLabel.frame;
labelFrame = CGRectMake(self.frame.origin.x, self.bounds.size.height - labelFrame.size.height - 10.0f, self.frame.size.width, labelFrame.size.height);
self.titleLabel.frame = labelFrame;
self.titleLabel.textAlignment = NSTextAlignmentCenter;

}

有什么想法吗?

【问题讨论】:

  • 如果您检查右侧按钮标签的框架,值是多少?标签尺寸不正确或位置不正确。查看框架会告诉您应该解决哪个问题。
  • 你检查过你设置的框架吗?

标签: ios objective-c uibutton


【解决方案1】:

当我将额外的标签添加到按钮时,我会使用自动布局来定位按钮内的额外标签。您应该能够指定水平居中,将标签固定在按钮底部,并指定前缘和后缘的最小边框。

如果您使用自动布局,则无需修改 layoutSubviews。你可以让自动布局来做所有的数学运算。

视觉格式语言类似于:

"V:[label]-(5)-|"
"H:|-(>=5)-[label]-(>=5)-|"

标签的高度将根据内容的固有尺寸计算。您可以将这些约束添加到已附加标签的 UIButton 类中。

【讨论】:

    【解决方案2】:

    嗯,我发现了问题所在。我在故事板中将 UIButton 子视图的对齐居中,但仍在尝试通过 layoutSubviews 设置它的框架。这意味着它改变了 UILabel 从它在框架中心的原点,将它推到屏幕的右侧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多