2016-04-13 162 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 –