我在图像"下方有一个自定义"文字网格。静态UITableViewCell内的UIButtons。
为了使8个UIButton形成4x2网格,我将它们放入2个水平UIStackViews并用垂直UIStackView包装它们。 您可以在下面的屏幕截图中看到详细信息。
它在模拟器和真实设备上运行完美,但在Storyboard中无法正确呈现。我想知道我的代码中是否缺少这些内容,或者我应该在Storyboard中检查/取消选中某些设置。
运行时行为(效果很好)
在故事板(混乱)中
概要
自定义按钮:
import UIKit
@IBDesignable class YPTextBelowImageButton: UIButton {
@IBInspectable var heightRatio: CGFloat = 0.8 {
didSet {
self.setNeedsDisplay()
}
}
override init(frame: CGRect) {
super.init(frame: frame)
self.frame = frame
self.imageView?.contentMode = .scaleAspectFit
self.titleLabel?.textAlignment = .center
self.setNeedsDisplay()
self.setNeedsLayout()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.imageView?.contentMode = .scaleAspectFit
self.titleLabel?.textAlignment = .center
self.setNeedsDisplay()
self.setNeedsLayout()
}
override func imageRect(forContentRect contentRect: CGRect) -> CGRect {
return CGRect(x: 0, y: 0, width: contentRect.size.width, height: contentRect.size.height * heightRatio)
}
override func titleRect(forContentRect contentRect: CGRect) -> CGRect {
return CGRect(x: 0, y: contentRect.size.height * heightRatio, width: contentRect.size.width, height: contentRect.size.height * (1 - heightRatio))
}
}
预览:
func prepareForInterfaceBuilder无法正常工作
override func prepareForInterfaceBuilder() {
self.imageView?.contentMode = .scaleAspectFit
self.titleLabel?.textAlignment = .center
self.setNeedsDisplay()
self.setNeedsLayout()
}