我尝试创建一个按钮面板,其中包含两行中的3个按钮。鉴于它不需要灵活,我试过
class MyViewController : UIViewController {
@IBOutlet weak var buttonPanel: UIView! // auto layout, aligned to the bottom of screen
var icon0: UIImageView!
var icon1: UIImageView!
...
var icon5: UIImageView!
override func viewDidLoad() {
super.viewDidLoad();
icon0 = UIImageView(image: UIImage(named: "ic_smiley_gray.png"))
icon1 = UIImageView(image: UIImage(named: "ic_smiley_gray.png"))
// ...
icon5 = UIImageView(image: UIImage(named: "ic_smiley_gray.png"))
let icons = [icon0, icon1, ..., icon5]
let btnCellW = CGFloat(self.view.bounds.width) / 3.0
let btnCellH = buttonPanel.frame.height / 2.0
for j in 0..<2 {
for i in 0..<3 {
let rect = CGRect(x: btnCellW * CGFloat(i),
y: btnCellH * CGFloat(j),
width: btnCellW, height: btnCellH)
let cell = UIView(frame: rect)
cell.layer.borderWidth = 0.5
cell.layer.borderColor = UIColor.grayColor().CGColor
cell.layer.backgroundColor = UIColor(red: 0.85 + 0.15 * CGFloat(1 - i % 2), green: 0.85, blue: 0.85,
alpha: 1.0).CGColor
buttonPanel.addSubview(cell)
let ic = icons[i + j*3]
ic.center = cell.center
ic.layer.borderWidth = 0.5
ic.layer.borderColor = UIColor.brownColor().CGColor
NSLog("adding icon \(ic.image) at \(ic.center.x) x \(ic.center.y)")
cell.addSubview(ic)
}
}
使用单元格正确绘制按钮面板,但只有第一个单元格具有图像,因此图像资源良好。其他细胞是空白的。我的问题是什么?
答案 0 :(得分:4)
问题在于这一行:
ic.center = cell.center
这可能是正确的,因为视图的中心位于其超视图的坐标中。你正在搅拌苹果和橘子。您希望ic
的中心在的超级视图中居中,而是将其放在相对于cell
相对于cell
的相同坐标处。 buttonPanel
!因此,除了第一个之外的所有ic
图像都在边界of their
单元格之外_,因此是不可见的。
相反,找出cell
界限的中心并将ic
的中心放在那里:即CGPoint(x:cell.bounds.width/2, y:cell.bounds.height/2)
。