【问题标题】:How can I make this gray area go away (iOS UIKit)?我怎样才能让这个灰色区域消失(iOS UIKit)?
【发布时间】:2020-12-02 16:13:16
【问题描述】:

我的 iOS 应用是用 UIKit 构建的,顶部有这个灰色区域,我不知道如何让它消失。这是此屏幕的代码: app screenshot

import Foundation
import UIKit
class HomeController: UIViewController {
    
    //MARK: - Properties
    
    private let topStack = HomeNavigationStackView()
    private let bottomStack = BottomControlsStackView();
    
    private let deckView: UIView = {
        let view = UIView()
        view.backgroundColor = .systemPink
        view.layer.cornerRadius = 5
        return view
    }()
    
    //MARK: - Lifecycle
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        configureUI()
        configureCards()
        
    }
    
    
    //MARK: - Helpers
 
    func configureCards(){
        let user1 = User(name: "Jane Doe", age: 22, images: [#imageLiteral(resourceName: "jane1"),#imageLiteral(resourceName: "appSampleProfile")])
        let user2 = User(name: "Megan", age: 34, images: [#imageLiteral(resourceName: "kelly2"),#imageLiteral(resourceName: "appSampleProfile")])
        
        let cardView1 = CardView(viewModel: CardViewModel(user: user1))
        let cardView2 = CardView(viewModel: CardViewModel(user: user2))
        
        deckView.addSubview(cardView1)
        deckView.addSubview(cardView2)
        
        cardView1.fillSuperview()
        cardView2.fillSuperview()
        
        
    }
    
    func configureUI(){
        view.backgroundColor = .white
        
        let stack = UIStackView(arrangedSubviews: [topStack, deckView, bottomStack])
        stack.axis = .vertical
        
        
        view.addSubview(stack)
        stack.anchor(top:view.safeAreaLayoutGuide.topAnchor, left: view.leftAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, right: view.rightAnchor)
        stack.isLayoutMarginsRelativeArrangement = true
        stack.layoutMargins = .init(top: 0, left: 12, bottom: 0, right: 12)
        stack.bringSubviewToFront(deckView)
    }
    
    
}

这是顶部导航项的代码:

import UIKit

class HomeNavigationStackView: UIStackView {
    
    // MARK: - Properties
    
    let settingsButton = UIButton(type: .system)
    let messageButton = UIButton(type: .system)
    let tinderIcon = UIImageView(image: #imageLiteral(resourceName: "app_icon"))
    
    
    //MARK: - Lifecycle
    
    
    override init(frame: CGRect){
        super.init(frame: frame)
        heightAnchor.constraint(equalToConstant: 80).isActive = true
        tinderIcon.contentMode = .scaleAspectFit

        
        settingsButton.setImage(#imageLiteral(resourceName: "top_left_profile").withRenderingMode(.alwaysOriginal), for: .normal)
        messageButton.setImage(#imageLiteral(resourceName: "top_right_messages").withRenderingMode(.alwaysOriginal), for: .normal)

        
        
        [settingsButton, UIView(), tinderIcon, UIView(), messageButton].forEach{
            view in addArrangedSubview(view)
        }
        
        distribution = .equalCentering
        isLayoutMarginsRelativeArrangement = true
        layoutMargins = .init(top:0, left:16, bottom:0, right:16)
    }
    
    required init(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
}

【问题讨论】:

  • 那是导航栏。
  • 您可能在故事板的导航视图控制器中嵌入了HomeController
  • 您的视图控制器嵌入在导航控制器中
  • 如果主视图控制器嵌入在导航控制器中,请转到情节提要文件并删除导航控制器并选中初始视图控制器复选框。 i.stack.imgur.com/kV9MA.png
  • 你已经嵌入了一个导航控制器,你不能移除它但是你可以改变它的颜色

标签: ios swift xcode uikit


【解决方案1】:

您已将视图控制器嵌入到 NavigationController 以执行转场。您可以隐藏导航栏并像这样设置自己的项目:

navigationController?.navigationBar.tintColor = UIColor.clear
navigationController?.navigationBar.isHidden = false
navigationController?.navigationBar.backgroundColor = UIColor.clear

或者,如果您想离开它并且困扰您的是阴影和灰色,那么您可以使用此代码。它移除了 navigationBar(灰色条)底部的阴影并将 backGrounColor 设置为清除,但它让您能够设置 titleColor、tile 等。

    view.backgroundColor = UIColor.white

    navigationController?.navigationBar.tintColor = UIColor.black
    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.backgroundColor = UIColor.clear
    navigationController?.navigationBar.isTranslucent = true
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 2016-05-07
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2019-06-13
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多