(5fc5ffc390e6e78546715986887789bf.png)UIButtonに画像を入れたいです。
レイアウト系もコードで実装していてStoryboardを使用しておりません。
以下のコードでは問題なくビルドできるものの画像が挿入されませんでした。
import UIKit class ViewController: UIViewController { let plusbtn: UIButton = { let button = UIButton(type: .system) let plusimage:UIImage = UIImage(named:"plus")! button.setImage(plusimage, for: .normal) return button }() let minesbtn: UIButton = { let button = UIButton(type: .system) button.setImage(#imageLiteral(resourceName: "minus"), for: .normal) button.tintColor = .red return button }() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .blue view.addSubview(plusbtn) plusbtn.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 300, paddingLeft: 0, paddingBottom: 0, paddingRight: 200, width: 200, height: 200) view.addSubview(minesbtn) minesbtn.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 300, paddingLeft: 200, paddingBottom: 0, paddingRight: 0, width: 200, height: 200) } } }
import UIKit extension UIView{ // anchorを使うための準備コード func anchor(top: NSLayoutYAxisAnchor?, left: NSLayoutXAxisAnchor?, bottom: NSLayoutYAxisAnchor?,right: NSLayoutXAxisAnchor?, paddingTop: CGFloat, paddingLeft: CGFloat, paddingBottom: CGFloat, paddingRight:CGFloat, width: CGFloat, height: CGFloat){ //AutoLayoutの有効化。UI部品の位置や大きさを指定できる translatesAutoresizingMaskIntoConstraints = false if let top = top { self.topAnchor.constraint(equalTo: top, constant: paddingTop).isActive = true } if let left = left { self.leftAnchor.constraint(equalTo: left, constant: paddingLeft).isActive = true } if let bottom = bottom { self.bottomAnchor.constraint(equalTo: bottom, constant: -paddingBottom).isActive = true } if let right = right { self.rightAnchor.constraint(equalTo: right, constant: -paddingRight).isActive = true } if width != 0{ widthAnchor.constraint(equalToConstant: width).isActive = true } if height != 0{ heightAnchor.constraint(equalToConstant: height).isActive = true } } }
ビルドはできますが、画像が挿入されていません。
Assets.xcassets内

エラーが出ておらずどこを直したらいいのか検索もできない状態です。
ご教授頂けたら嬉しいです。
以下をチェックしてみてください。
1. UIImage設定時のファイル名はAssets.xcassets内のファイル名をちゃんと定義してますか?
2. Xcodeを一旦終了して、再起動する
ありがとうございます。
1.については問題なく指定できていると思います。
試したこと:
Assets.xcassetsに入っていない画像名を入れてビルドしてみた結果、エラーになりました。
let plusimage:UIImage = UIImage(named:"testtest")!
button.setImage(plusimage, for: .normal)
return button
エラーコード
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
plusと入れているときはエラーが出ていないのでちゃんと定義できているかと思います。
念の為、Assets.xcassetsのスクリーンショットを質問文に追加しました。
2をしてみましたが、結果はうまく行きませんでした。
こちらの記事を参考に試してみてください。
https://qiita.com/_asa08_/items/c94bb1a8746f07e8933a
ありがとうございます。
レイアウト系もコードで実装していて、初期値はCustomなので、これが原因ではないのかもと思いました。
なるほど。では以下を試してみてください
1. button.setImage(plusimage.withRenderingMode(.alwaysOriginal), for: .normal)
2. backGroundcolorをクリアにしてみる (button.backgroundColor = .clear)
ありがとうございました!
1の方法で無事画像が表示されました!
回答1件
あなたの回答
tips
プレビュー
