Как я могу убрать эту серую область (iOS UIKit)?

#ios #swift #xcode #uikit

#iOS #swift #xcode #uikit

Вопрос:

Мое приложение для iOS, созданное с помощью UIKit, имеет эту серую область вверху, и я не знаю, как ее убрать. Вот код для этого экрана: скриншот приложения

 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")
    }
    
    
}
 

Комментарии:

1. Это панель навигации.

2. Возможно, вы встроили HomeController в контроллер представления навигации в раскадровке.

3. Ваш контроллер просмотра встроен в контроллер навигации

4. Если контроллер домашнего просмотра встроен в контроллер навигации, перейдите к файлу раскадровки, удалите контроллер навигации и установите флажок Initial view controller . i.stack.imgur.com/kV9MA.png

5. Вы встроили навигационный контроллер, вы не можете удалить его, но вы можете изменить его цвет

Ответ №1:

вы встроили свой контроллер представления в NavigationController для выполнения переходов. Вы можете скрыть панель навигации и установить свои собственные элементы следующим образом:

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

Или, если вы хотите оставить ее, и вас беспокоит тень и серый цвет, вы можете использовать этот код. Он удаляет тень в нижней части панели навигации (серая панель) и устанавливает backGrounColor на clear, но оставляет вам возможность устанавливать 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)