【问题标题】:why are my UI components not showing on simulator为什么我的 UI 组件没有在模拟器上显示
【发布时间】:2022-01-08 02:28:43
【问题描述】:

我正在尝试以编程方式将 UI 组件添加到我的应用程序中。

这是我的 ViewController 代码 -

 import UIKit
 import Stripe
 import Alamofire

  class ViewController: UIViewController {


var productStackView = UIStackView()
var paymentStackView = UIStackView()

var productImageView = UIImageView()
var productLabel = UILabel()
var payButton = UIButton()
var loadingSpinner = UIActivityIndicatorView()
var outputTextView = UITextView()
var paymentTextField = STPPaymentCardTextField()
override func viewDidLoad() {
    super.viewDidLoad()
    self.setupUI()
}
func setupUI() {
    setupProductImage()
    setupProductLabel()
    setupLoadingSpinner()
    setupPaymentTextFiled()
    setupPayButton()
    setupOutputTextView()
    
    self.productStackView.frame = CGRect(x: 0, y: 70, width: 330, height: 150)
    self.productStackView.center.x = self.view.center.x
    self.productStackView.alignment = .center
    self.productStackView.axis = .vertical
    self.productStackView.distribution = .equalSpacing
    self.productStackView.addArrangedSubview(self.productImageView)
    self.productStackView.setCustomSpacing(10, after: self.productImageView)
    self.productStackView.addArrangedSubview(self.productLabel)
    self.view.addSubview(self.productStackView)

    self.paymentStackView.frame = CGRect(x:0, y: 250, width: 300, height: 100)
    self.paymentStackView.center.x = self.view.center.x
    self.paymentStackView.alignment = .fill
    self.paymentStackView.axis = .vertical
    self.paymentStackView.distribution = .equalSpacing
    self.paymentStackView.addArrangedSubview(self.paymentTextField)
    self.paymentStackView.addArrangedSubview(self.payButton)
    self.view.addSubview(self.paymentStackView)

}
func setupProductImage(){
    self.productImageView = UIImageView(frame: CGRect(x: 50, y: 50, width: 275, height: 200))
    self.productImageView.image = UIImage(named: "stripe press")
    self.productImageView.contentMode = .scaleAspectFit
}
func  setupProductLabel() {
    self.productLabel.frame = CGRect(x: 0, y: 420, width: self.view.frame.width, height: 50)
    self.productLabel.text = "Buy a stripe press book = $10.99"
    self.productLabel.textAlignment = .center
}


func setupOutputTextView() {
self.outputTextView.frame = CGRect(x: 0, y: 420, width: self.view.frame.width - 50, height: 100)
    self.outputTextView.center.x = self.view.center.x
    self.outputTextView.textAlignment = .left
    self.outputTextView.font = UIFont.systemFont(ofSize: 18)
    self.outputTextView.text = ""
    self.outputTextView.layer.borderColor = UIColor.purple.cgColor
    self.outputTextView.isEditable = false
    self.view.addSubview(self.outputTextView)
}
func  setupPaymentTextFiled() {
    self.paymentTextField.frame = CGRect(x: 0, y: 0, width: 330, height: 60)
}
func setupPayButton() {
    self.payButton.frame = CGRect(x: 60, y: 480, width: 150, height: 40)
    self.payButton.setTitle("Submit Payment", for: .normal)
    self.payButton.setTitleColor(UIColor.white, for: .normal)
    self.payButton.layer.cornerRadius = 5.0
    self.payButton.backgroundColor = UIColor.init(red:50/255,green: 50/255,blue: 93/255, alpha:1.0)
    self.payButton.layer.borderWidth = 1.0
   
    
    
    
    self.payButton.addTarget(self, action: #selector(pay), for: .touchUpInside)
   // payButton.addTarget(self, action: #selector(pay), for: UIControl.Event.touchUpInside)
    
}
func setupLoadingSpinner() {
    self.loadingSpinner.color = UIColor.darkGray
    self.loadingSpinner.frame = CGRect(x: 0, y: 300, width: 25, height: 25)
    self.loadingSpinner.center.x = self.view.center.x
    self.view.addSubview(self.loadingSpinner)
}

func startLoading() {
    DispatchQueue.main.async {
        self.loadingSpinner.startAnimating()
        self.loadingSpinner.isHidden = false
    }
}

func stopLoading() {
    DispatchQueue.main.async {
        self.loadingSpinner.stopAnimating()
        self.loadingSpinner.isHidden = true
   }
}
    func diplayStatus (_ message:String) {
      DispatchQueue.main.async {
       self.outputTextView.text += message + " \n"
         self.outputTextView.scrollRangeToVisible(NSMakeRange(self.outputTextView.text.count - 1, 1))
    }
  }
     @objc func pay() {}
   }

现在,除了按钮之外的所有 UI 组件都没有显示在模拟器上,如下所示:-

代码看起来不错。我已经浏览了很多次代码。 我知道这一定是菜鸟的错误,但是我在这里错过了什么? 你能帮我解决这个问题吗?

【问题讨论】:

  • 您确定您正在加载正确的视图控制器吗?看起来您的 Storyboard 中可能有一个正在显示的视图控制器,但它没有将其自定义类设置为 ViewController。快速测试您的代码和 UI 元素显示良好(尽管您确实应该使用自动布局而不是显式框架)。
  • 是的,这就是问题所在,我没有在课堂上选择它。你可以回答它,以便我可以投票。谢谢

标签: ios swift xcode


【解决方案1】:

最常见的原因:

忘记设置视图控制器的自定义类(在故事板中)。

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 1970-01-01
    • 2019-04-29
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多