>

UISearchBar, UINavigationBar 및 UIToolBar의 테두리 그림자를 제거하는 데 문제가 있습니다. 그래서 기본적으로 UISearchController를 내장 한 뷰 컨트롤러가 있으며 그 아래에는 UISegmentedControl이있는 UIToolbar가 있습니다. 문제는 appearance () 대리자를 사용하여 UINavigationBar, UISearchBar, UIToolbar에 대한 경계 그림자를 개별적으로 제거한 후에도 UISearchBar와 UIToolBar 사이에 경계가 여전히 표시된다는 것입니다.

다음 화면으로 가면 UINavigationBar에 테두리 그림자가 없다는 것을 알 수 있으므로 표시되는 테두리가 UINavigationBar가 아닌지 확인하십시오.

또한 이상한 것을 발견했습니다. UINavigationBar에서 UISearchController를 숨기면 UINavigationBar와 UIToolBar 사이에 경계가 없습니다. UIToolBar를 숨기면 UINavigationBar 뒤에 테두리가 없습니다.

extension AppDelegate {
    private func appearanceSetup() {
        UINavigationBar.appearance().barTintColor = .appBlueColor
        UINavigationBar.appearance().shadowImage = UIImage()
        UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
        UITextField.appearance().tintColor = .appBlueColor
        UISearchBar.appearance().setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
        UISearchBar.appearance().barTintColor = .appBlueColor
        UISearchBar.appearance().backgroundImage = UIImage()
        UIToolbar.appearance().setShadowImage(UIImage(), forToolbarPosition: .any)
        UIToolbar.appearance().barTintColor = .appBlueColor
        UIToolbar.appearance().layer.borderWidth = 1
        UIToolbar.appearance().layer.borderColor = UIColor.appBlueColor.cgColor
    }
}

class HomeViewController: UIViewController {
   private let searchController: UISearchController = {
        let searchController = UISearchController(searchResultsController: nil)
        searchController.obscuresBackgroundDuringPresentation = false
        searchController.searchBar.placeholder = "Search"
        searchController.searchBar.tintColor = .white
        searchController.searchBar.barTintColor = .appBlueColor
        return searchController
    }()
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.searchController = searchController
    }

  • 답변 # 1

    self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
    
    

    이 코드를 사용해 보시면 문제가 해결되기를 바랍니다

  • 답변 # 2

    appeareance 에서 비슷한 문제가 발생하면 내 문제를 해결하지 못했습니다. 그래서 구성 요소 사용자 정의를 진행했습니다. 나는 UINavigationBar 를 위해 이것을했다  내 UINavigationBar 에도 불구하고 효과가있었습니다. 코드가 아닌 스토리 보드에 넣었지만 어쨌든 대부분 작동합니다. 시도하고 알려주세요 :

    class CustomNavigationBar: UINavigationBar
    {
        override init(frame: CGRect) {
            super.init(frame: frame)
            setBackgroundImage(UIImage(), for: .default)
            shadowImage = UIImage()
            backgroundColor = <Your UIView.backgoundColor of type: UIColor>
            tintColor = UIColor.white
        }
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            setBackgroundImage(UIImage(), for: .default)
            shadowImage = UIImage()
            backgroundColor = <Your UIView.backgoundColor of type: UIColor>
            tintColor = UIColor.white
        }
    }
    
    

    UISearchController 에 대한 당신의 접근 방식이 무엇인지 모르겠습니다 하지만 searchBar에서도 같은 문제가 있었으므로 searchBar를 코드에 추가하고 대리자를 사용합니다. iOS 버전이 iOS 10 또는 iOS 10+ 미만에서는 제대로 작동하지 않기 때문에 자리 표시자가 두 번 나타납니다. 어느 것을 제거할지에 따라 다릅니다

       override func viewDidLoad() {
            super.viewDidLoad()
            setup()
            installRefresh()
        }
        private func setup() {
            let searchBar = UISearchBar()
            searchBar.scopeButtonTitles = [placeholdetText] // The String for the place holder
            searchBar.searchBarStyle = .default
            searchBar.barTintColor = view.backgroundColor 
            searchBar.placeholder = placeholdetText + ".."
            searchBar.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
            searchBar.backgroundColor = UIColor.clear
            searchBar.delegate = self
            // Extra UI Setup
       }
        func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
            if searchText.isEmpty
            {
                // The filters objects it's what i show after the search, and the 
                // general objects it's all the objects
                filtersObjects = generalObjects
            }
            else
            {
               //... Al the code tu filter from the searchText 
            }
              // Refresh the UI
        }
    
    
    

  • 답변 # 3

    override func viewDidLoad() {
            super.viewDidLoad()
            //MARK:- for default navigation bar
            self.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
            self.navigationItem.backBarButtonItem?.tintColor = UIColor.white
            self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for:.default)
            self.navigationController?.navigationBar.shadowImage = UIImage()
            self.navigationController?.navigationBar.layoutIfNeeded()
        }
    
    

  • 이전 angular - 이온 4 - 중앙에 경고 버튼을 정렬하는 방법은 무엇입니까?
  • 다음 관리자 (Hashicorp-consul)에서 Vault (Hashicorp-Vault)를 서비스로 등록하는 방법, kubernetes를 사용하고 있습니까?