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("Done", 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="Seafood"
collectionView?.backgroundColor=UIColor.white
// view.backgroundColor=UIColor.redColor
collectionView?.register(VideoCell.self, forCellWithReuseIdentifier: "cellid")
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell=collectionView.dequeueReusableCell(withReuseIdentifier: "cellid", for: indexPath)
// cell.backgroundColor=UIColor.red
return cell
}
/* override func collectionView(collectionView: UICollectionView, cellForItemAtIndexpath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell=collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath as IndexPath)
return cell
}*/
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> 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: "food24")
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="Resturant name here"
return label
}()
let subtitleTextView:UITextView = {
let textView=UITextView()
textView.translatesAutoresizingMaskIntoConstraints=false
textView.textContainerInset=UIEdgeInsetsMake(0, -4, 0, 0)
textView.textColor=UIColor.lightGray
textView.text = "SeaFood"
return textView
}()
func setupView(){
//backgroundColor=UIColor.blue
addSubview(thumbnailImageView)
addSubview(separatorView)
addSubview(userProfileImageView)
addSubview(titleLabel)
addSubview(subtitleTextView)
addConstraintsWithFormat(format: "H:|-16--16-|", view: thumbnailImageView)
addConstraintsWithFormat(format: "H:|-16-", view: userProfileImageView)
//vertial constratints
addConstraintsWithFormat(format: "V:|-16--8--16-|", view: thumbnailImageView,userProfileImageView,separatorView)
addConstraintsWithFormat(format: "H:||", 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: "V:", view: titleLabel)
//addConstraintsWithFormat(format: "H:||", view: titleLabel)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension UIView{
func addConstraintsWithFormat(format:String,view:UIView...){
var viewDictionary=()
for (index,view) in view.enumerated(){
let key="v\(index)"
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]