将子视图添加到堆栈视图以设置背景颜色的函数或类

Posted

技术标签:

【中文标题】将子视图添加到堆栈视图以设置背景颜色的函数或类【英文标题】:Function or class to add subview to Stack view to set background color 【发布时间】:2017-10-15 13:00:13 【问题描述】:

我正在创建一个输入表单,每个输入行(标签和文本字段)都是通过使用堆栈视图排列的。我试图为特定的堆栈视图添加白色背景颜色。我已经实现了,但是努力将其创建为一个函数或类,以便更轻松地控制哪些堆栈视图来获取背景。

关于将其转换为我可以在整个项目中使用的函数或类的任何提示? (注意:当前的解决方案,只为最后一个堆栈视图添加背景色,而不是全部......尚未修复......)

 import UIKit
 import Firebase

class createActivityVC: UIViewController 

override func viewDidLoad() 
    super.viewDidLoad()

    // runs the functions to add backgrounds to the stackviews

    pinBackground(backgroundView, to: nameStackView)
    pinBackground(backgroundView, to: typeStackView)
    pinBackground(backgroundView, to: weaponStackView)
    pinBackground(backgroundView, to: killStackView)
    pinBackground(backgroundView, to: sightingsStackView)
    pinBackground(backgroundView, to: noteStackView)

    // Do any additional setup after loading the view.


// Outlets used to set bacground color
@IBOutlet weak var nameStackView: UIStackView!
@IBOutlet weak var typeStackView: UIStackView!
@IBOutlet weak var weaponStackView: UIStackView!
@IBOutlet weak var killStackView: UIStackView!
@IBOutlet weak var sightingsStackView: UIStackView!
@IBOutlet weak var noteStackView: UIStackView!

// Normal outlets
@IBOutlet weak var name: UITextField! // required
@IBOutlet weak var type: UITextField! // required - type of hunt
@IBOutlet weak var weapon: UITextField! // required - weapon name
@IBOutlet weak var kills: UITextField! // optional (eg. 1)
@IBOutlet weak var sightings: UITextField! // optional (eg. 2)
@IBOutlet weak var note: UITextField! // optional short description of the hunt

@IBOutlet weak var saveBtn: UIButton!
@IBOutlet weak var cancelBtn: UIButton!



@IBAction func saveBtnWasPressed(_ sender: Any) 
    if name.text != nil && type.text != nil && weapon.text != nil 
        saveBtn.isEnabled = false // disabled the btn while uploading data - this ensure that user can't send the form twice

        DataService.instance.uploadPost(uid: (Auth.auth().currentUser?.uid)!, name: name.text!, type: type.text!, weapon: weapon.text!, kills: kills.text!, sightings: sightings.text!, note: note.text!,  withGroupKey: nil, sendComplete: 
            (isComplete) in
        if isComplete 
            self.saveBtn.isEnabled = true
            self.dismiss(animated: true, completion: nil)

         else 
            self.saveBtn.isEnabled = true
            print("There was an error with uploading the activity")
        

        )


    


@IBAction func cancelBtnWasPressed(_ sender: Any) 
    self.dismiss(animated: true, completion: nil)



private lazy var backgroundView: UIView = 
    let view = UIView()
    view.backgroundColor = .white
    return view
()

private func pinBackground(_ view: UIView, to stackView: UIStackView) 
    view.translatesAutoresizingMaskIntoConstraints = false
    stackView.insertSubview(view, at: 0)
    view.pin(to: stackView)




public extension UIView 
public func pin(to view: UIView) 
    NSLayoutConstraint.activate([
        leadingAnchor.constraint(equalTo: view.leadingAnchor),
        trailingAnchor.constraint(equalTo: view.trailingAnchor),
        topAnchor.constraint(equalTo: view.topAnchor),
        bottomAnchor.constraint(equalTo: view.bottomAnchor)
        ])


这就是现在的样子..

【问题讨论】:

【参考方案1】:

这里是代码。您可以将背景颜色添加到任何堆栈视图。 您可以向 stackview 添加颜色,如

typeStackView.addBackground(color:.white)
    
extension UIStackView 
        func addBackground(color: UIColor) 
        let subView = UIView(frame: bounds)
        subView.backgroundColor = color
        subView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        insertSubview(subView, at: 0)
    

【讨论】:

查看以下线程以获取更多详细信息。 ***.com/questions/34868344/…

以上是关于将子视图添加到堆栈视图以设置背景颜色的函数或类的主要内容,如果未能解决你的问题,请参考以下文章

隐藏子视图会在视图上留下微弱的阴影

如何将图像视图颜色设置为文本字段背景颜色

在 SwiftUI 中放置在导航堆栈中时滚动视图的背景颜色

设置子视图背景颜色不影响到父视图的背景颜色方法

如何使 SKView 的背景颜色清晰

设置背景颜色时回收站视图不显示视图