2016-04-13 164 views
0

我有以下代码基于获取的数据创建按钮。在创建按钮后,它们会添加到滚动视图中。 而且它们应该水平显示。动态创建和添加滚动按钮的按钮

我可以确认有数据但在模拟器中显示奇怪的东西(参见附件截图)。我的实施出了什么问题?

override func viewDidLoad() { 
    super.viewDidLoad() 

    fetchRecipeCategory() 

    for var i = 0; i < self.category.count; i++ { 
     let frame1 = CGRect(x: 20, y: 20 + (index * 45), width: 45, height: 45) 
     let button = UIButton(frame: frame1) 
     button.setTitle("\(category[i].name)", forState: .Normal) 
     button.backgroundColor = UIColor.blackColor() 
     self.categoryScrollView.addSubview(button) 

    } 
    print(category[0].name) 
} 

enter image description here

+2

它看起来像显示'可选(“yourData”)'。你有没有试过解开它? –

+0

良好的接触,但重叠的问题仍然存在。我怎样才能以平均分布水平分布它? –

+0

您应该编辑您的问题并指出存在重叠问题。 –

回答

1

您需要为每个按钮使用不同的y frame值。您的按钮创建使用index作为其y框架,并且您没有增加它。

由于您正在使用for循环,因此可以使用i值。

let frame1 = CGRect(x: 20, y: 20 + (i * 45), width: 45, height: 45) 

此代码将创建按钮的垂直列表。如果你想水平列出您的按钮,每个按钮

let frame1 = CGRect(x: 20 + (i * 45), y: 20, width: 45, height: 45) 

至于你的截图改变x frame价值,它看起来像该按钮标题设置为Optional("data")。如果你确定你的数据源包含数据,你可以简单地为你的按钮标题打开它。如果您使用可选绑定,则更好。

+0

谢谢。什么是可选绑定?像'如果让_ =值{}'或者守卫? –

+0

使用'if let'应该足够你的情况。如果您对这两者之间的比较感兴趣,则可能需要阅读http://stackoverflow.com/questions/32256834/swift-2-0-guard-vs-if-let –