菜鸟教程小白 发表于 2022-12-11 19:17:56

ios - 如何在 UITabBarController 中的所有选项卡上制作 UIView


                                            <p><p>在 uitabbarController 的所有选项卡之上制作 uiview。
<a href="/image/BtDVG.png" rel="noreferrer noopener nofollow"><img src="/image/BtDVG.png" alt="enter image description here"/></a>我计划制作一个名为“uiView.swift”的baseviewcontroller。在“uiView.swift”中,我添加了我的uiview。之后,我想从该 uiView.swift 继承每个选项卡 ViewController(比如“resturent.swift”)。因此,在 UITabBarController 的每个选项卡中,您将看到“uiView.swift” Viewresued.uiView.swift 连接到 Storyboard 中的 ViewController,该按钮具有在按钮单击时显示 View 的按钮。这是我的“uiView.swift”</p >

<pre><code>class uiView: UIViewController {
var menuView: UIView?

    override func viewDidLoad() {
      super.viewDidLoad()
      menuView = UIView(frame: CGRect(x: 0, y: -200, width: 420, height: 200))
      menuView?.backgroundColor = UIColor.green
      view.addSubview(menuView!)
    }
    @objc func MyBag(){

    }
    override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
    }
    @IBAction func collectionmenuone(_ sender: Any) {
       menuView=UIView(frame: CGRect(x: 0, y: 0, width: 420, height: 200))
      menuView?.backgroundColor=UIColor.lightGray
      self.view.addSubview(menuView!)

      var btnbag = UIButton(type: .roundedRect)
      btnbag.addTarget(self, action: #selector(self.MyBag), for: .touchUpInside)
      btnbag.frame = CGRect(x: 104, y:130 , width: 150, height: 60)
      btnbag.setTitle(&#34;Done&#34;, for: .normal)
      btnbag.backgroundColor=UIColor.green
      menuView?.addSubview(btnbag)

    }


}
</code></pre>

<p>如何在标签栏 Controller 的每个选项卡中重用“uiView.swift”中的 View (即“resturent.swif”)</p>

<pre><code>class resturent:UICollectionViewController,UICollectionViewDelegateFlowLayout {

    override func viewDidLoad() {
      super.viewDidLoad()
      navigationItem.title=&#34;Seafood&#34;
      collectionView?.backgroundColor=UIColor.white
      // view.backgroundColor=UIColor.redColor
      collectionView?.register(VideoCell.self, forCellWithReuseIdentifier: &#34;cellid&#34;)
    }
    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -&gt; Int {
      return 5
    }
    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -&gt; UICollectionViewCell {
      let cell=collectionView.dequeueReusableCell(withReuseIdentifier: &#34;cellid&#34;, for: indexPath)
      // cell.backgroundColor=UIColor.red
      return cell
    }
    /* override func collectionView(collectionView: UICollectionView, cellForItemAtIndexpath indexPath: NSIndexPath) -&gt; UICollectionViewCell {
   let cell=collectionView.dequeueReusableCell(withReuseIdentifier: &#34;cellId&#34;, for: indexPath as IndexPath)

   return cell
   }*/
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -&gt; CGFloat {
      return 0
    }
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -&gt; CGSize {
      let height=(view.frame.width - 16 - 16) * 9/16
      returnCGSize(width: view.frame.width, height: height + 16 + 68)
    }
}
class VideoCell:UICollectionViewCell{
    override init(frame: CGRect) {
      super.init(frame: frame)
      setupView()
    }
    let thumbnailImageView:UIImageView = {
      let imageView=UIImageView()
      imageView.backgroundColor=UIColor.blue
      imageView.image=UIImage(named: &#34;food24&#34;)
      imageView.contentMode = .scaleAspectFill
      imageView.clipsToBounds=true
      return imageView
    }()
    let userProfileImageView:UIImageView={
      let imageView=UIImageView()
      //imageView.backgroundColor=UIColor.green
      return imageView
    }()
    let separatorView:UIView = {
      let view = UIView ()
      view.backgroundColor=UIColor(red: 230/255, green: 230/255, blue: 230/255, alpha: 1)
      return view
    }()
    let titleLabel:UILabel={
      let label = UILabel()
      label.translatesAutoresizingMaskIntoConstraints=false
      label.text=&#34;Resturant name here&#34;
      return label
    }()
    let subtitleTextView:UITextView = {
      let textView=UITextView()
      textView.translatesAutoresizingMaskIntoConstraints=false
      textView.textContainerInset=UIEdgeInsetsMake(0, -4, 0, 0)
      textView.textColor=UIColor.lightGray
      textView.text = &#34;SeaFood&#34;
      return textView
    }()
    func setupView(){
      //backgroundColor=UIColor.blue
      addSubview(thumbnailImageView)
      addSubview(separatorView)
      addSubview(userProfileImageView)
      addSubview(titleLabel)
      addSubview(subtitleTextView)
      addConstraintsWithFormat(format: &#34;H:|-16--16-|&#34;, view: thumbnailImageView)
      addConstraintsWithFormat(format: &#34;H:|-16-&#34;, view: userProfileImageView)
      //vertial constratints
      addConstraintsWithFormat(format: &#34;V:|-16--8--16-|&#34;, view: thumbnailImageView,userProfileImageView,separatorView)
      addConstraintsWithFormat(format: &#34;H:||&#34;, view: separatorView)
      //top constraints
      addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .top, relatedBy: .equal, toItem:thumbnailImageView , attribute: .bottom, multiplier: 1, constant: 8))
      //left constaints
      addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .left, relatedBy: .equal, toItem: userProfileImageView, attribute: .right, multiplier: 1, constant: 8))
      //right constraint
      addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .right, relatedBy: .equal, toItem: thumbnailImageView, attribute: .right, multiplier: 8, constant: 0))
      //height constraint
      addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .height, relatedBy: .equal, toItem: self, attribute: .height, multiplier: 0, constant: 20))

      //top constraints
      addConstraint(NSLayoutConstraint(item: subtitleTextView, attribute: .top, relatedBy: .equal, toItem:titleLabel , attribute: .bottom, multiplier: 1, constant: 4))
      //left constaints
      addConstraint(NSLayoutConstraint(item: subtitleTextView, attribute: .left, relatedBy: .equal, toItem: userProfileImageView, attribute: .right, multiplier: 1, constant: 8))
      //right constraint
      addConstraint(NSLayoutConstraint(item: subtitleTextView, attribute: .right, relatedBy: .equal, toItem: thumbnailImageView, attribute: .right, multiplier: 8, constant: 0))
      //height constraint
      addConstraint(NSLayoutConstraint(item: subtitleTextView, attribute: .height, relatedBy: .equal, toItem: self, attribute: .height, multiplier: 0, constant: 20))


      // addConstraintsWithFormat(format: &#34;V:&#34;, view: titleLabel)
      //addConstraintsWithFormat(format: &#34;H:||&#34;, view: titleLabel)

    }
    required init?(coder aDecoder: NSCoder) {
      fatalError(&#34;init(coder:) has not been implemented&#34;)
    }
}
extension UIView{
    func addConstraintsWithFormat(format:String,view:UIView...){
      var viewDictionary=()
      for (index,view) in view.enumerated(){
            let key=&#34;v\(index)&#34;
            view.translatesAutoresizingMaskIntoConstraints=false
            viewDictionary=view
      }
      NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: format , options: NSLayoutFormatOptions(), metrics: nil, views: viewDictionary))
    }

}
</code></pre>

<p>uiView.swift 是 UIViewController 类型,resturent.swif 是 UICollectionViewController 类型。您可以将应用程序的入口点从 uiView.swift 更改为登录 ViewController (Viewcontroller.swift)以运行应用程序。我如何通过继承重用uiView.swift 中的 View ?您可以从此链接下载项目。 <a href="https://drive.google.com/file/d/1XSwOZcfvglB_7Zt_E8W8W3Dym3i1_lrB/view?usp=sharing" rel="noreferrer noopener nofollow">https://drive.google.com/file/d/1XSwOZcfvglB_7Zt_E8W8W3Dym3i1_lrB/view?usp=sharing</a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您不应在任何 View 上添加菜单 View 。取而代之的是,您可以直接从 AppDelegate 将其添加到您的窗口中。
在窗口上添加 View 会将其置于当前可见的所有 View 之上。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在 UITabBarController 中的所有选项卡上制作 UIView,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/47300761/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/47300761/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在 UITabBarController 中的所有选项卡上制作 UIView