質問
View
の中にTableView
を置き,その中にCell
を置き,その中にLabel
を置いて,それをbar
という名前でOutlet
でコードに接続しました.(*1)
このbar
のconstraint
のmultiplier
をコードで変更できるようにしたいと考えています.(*2)
Code1
でmultiplier
を手入力で変更すればbar
の幅が変更できることを確認しました.
しかし,Code2
のように変数をmultiplier
に入れて幅を変更したいのですが,
Cannot invoke 'constraint' with an argument list of type '(equalTo: NSLayoutDimension, multiplier: Double, constant: Int)'
とエラーが出てしまいます.
どのようにしたらmultiplier
の値をいろいろ変更できるようになるでしょうか.
Code1
Swift
1class TableViewCell: UITableViewCell { 2 @IBOutlet weak var votesBar: UILabel! //(*1) 3} 4 5 6class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 7 8//省略 9 10func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 11 12 guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? TableViewCell else { 13 return UITableViewCell() 14 } 15 16 DispatchQueue.main.async { 17 cell.Bar.widthAnchor.constraint(equalTo: self.TableView.widthAnchor, multiplier: 0.8, constant: 0).isActive = true //(*2) 18 } 19 return cell 20} 21}
解決方法
Swift
1class TableViewCell: UITableViewCell { 2 @IBOutlet weak var votesBar: UILabel! 3} 4 5 6class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 7 8//省略 9 10func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 11 12 guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? TableViewCell else { 13 return UITableViewCell() 14 } 15 16 let value = 0.8 //変更 17 DispatchQueue.main.async { 18 cell.Bar.widthAnchor.constraint(equalTo: self.TableView.widthAnchor, multiplier: value, constant: 0).isActive = true //変更 19 } 20 return cell 21} 22}
回答1件
あなたの回答
tips
プレビュー