2016-08-24 8 views
1

私はUITableViewにフィルタリングできる項目のリストを持っています。このUIImageViewを完全に隠すには

enter image description here

Xの円は、フィルタをクリアするクリアボタンであり、はのUIViewを閉じ:ユーザがフィルタを選択すると、のUIViewは0から40個のピクセルに変更高NSLayoutConstraintを用いて露光されます高さ制約を変更することにより、バック0

に問題がときUIView閉じ、そのクリアボタンが完全に消えていないということです。

enter image description here

はここに関連するコードです:

class LiftLogViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, NSFetchedResultsControllerDelegate { 

    let coreDataStack = CoreDataStack() 

    var liftEvents = [LiftEvent]() 

    //MARK: IB outlets 

    @IBOutlet var tableView: UITableView! 
    @IBOutlet weak var navItem: UINavigationItem! 
    @IBOutlet weak var filterViewHeightConstraint: NSLayoutConstraint! 
    @IBOutlet weak var clearFilterButton: UIImageView! 
    @IBOutlet weak var selectedFilter: UILabel! 
    @IBOutlet weak var clearButtonHeightConstraint: NSLayoutConstraint! 
    @IBOutlet weak var clearButtonView: UIImageView! 

    var isFilterViewOpen = false 

    override func viewDidLoad() { 

    let doneButton = UIBarButtonItem(title: "Done", style: .Plain, target: self, action: #selector(self.dismissLog(_:))) 

    let filterImage = UIImage(named: "filter_icon") 

    let filterButton = UIBarButtonItem(image: filterImage, style: .Plain, target: self, action: #selector(self.actionFilter)) 

    self.navItem.rightBarButtonItems = [doneButton, filterButton] 

    let buttonTap = UITapGestureRecognizer(target: self, action: #selector(self.clearFilter)) 

    clearFilterButton.addGestureRecognizer(buttonTap) 

    filterViewHeightConstraint.constant = 0.0 

    clearButtonHeightConstraint.constant = 0.0 

    super.viewDidLoad() 
    } 


override func viewWillAppear(animated: Bool) { 
    let filterPredicate: NSPredicate? 
    if let logFilter = UserDefaultsManager.sharedInstance.logFilter?.rawValue { 
     filterPredicate = NSPredicate(format: "lift.liftName = [c] %@", logFilter) 
     print("viewWillAppear thinks the filter is \(logFilter)") 
    } else { 
     filterPredicate = nil 
    } 
    reloadData(filterPredicate) 

    let currentFilter = getCurrentLogFilter() 

    if currentFilter != nil { 
     selectedFilter.text = "Filtered by \(currentFilter!)" 
     isFilterViewOpen = true 
     clearButtonView.hidden = isFilterViewOpen ? false : true 
    } else { 
     selectedFilter.text = nil 
    } 

    super.viewWillAppear(animated) 
    } 


override func viewDidAppear(animated: Bool) { 
    filterViewHeightConstraint.constant = isFilterViewOpen ? 40.0 : 0.0 

    clearButtonHeightConstraint.constant = isFilterViewOpen ? 21.0 : 0.0 

    clearButtonView.hidden = isFilterViewOpen ? false : true 

    UIView.animateWithDuration(0.33, delay: 0, options: [.CurveEaseOut], animations: { 

    self.view.layoutIfNeeded() 
     }, completion: nil) 
    } 


func clearFilter() { 
    UserDefaultsManager.sharedInstance.logFilter = nil 

    isFilterViewOpen = !isFilterViewOpen 

    UIView.animateWithDuration(0.33, delay: 0, options: [.CurveEaseOut], animations: { 

     self.view.layoutIfNeeded() 
     }, completion: nil) 

    selectedFilter.text = nil 

    reloadData() 
    } 

あなたは、私は両方trueにクリアボタンを保持するUIView上の.hidden値を設定しようとしたと私は0.0が、いずれにも高さ制約を変更しようとした見ることができますそれらが完全に消滅した。

しばらく検索しても回答が得られません。誰が私がやっていることで何が間違っているのか指摘できますか?ありがとう。

+0

'UIButton'イメージを閉じているときに' UIButton'イメージをnilに設定し、開いたときに再び設定するか、UIViewと同じ高さに設定します。 –

答えて

0

ナビゲーションバーのヘアラインの色がはっきりしているように見えますが、ボタンがまだわずかに見えているようです。おそらくそれを変更し、ボタンをカバーしているかどうかを確認してください。あなたはこのようにそれを行うことができます:ダスティン・シュペングラーが述べたように

let view = UIView() 
view.backgroundColor = UIColor.grayColor() 
self.navigationController!.navigationBar.hairlineImageViewInNavigationBar(view) 
0

は、ナビゲーションバーの透明ヘアライン画像ビューは、その下に少し見えるようにフィルタボタンの原因となります。回避策として、拘束定数が0.0に設定されている場合にフィルタビュー(filterView.hidden = true)を非表示にし、拘束定数が40.0に設定されている場合にフィルタビュー(filterView.hidden = false)を再表示できます。

0

ご意見ありがとうございます。ソリューションが少し違っていたことが判明しましたが、あなたの提案は、私はその領域でもう少し周りを突きとめて解決策を見つけることができました。

私はこれは私が私のUIViewUIView「によってフィルタリング」灰色)とUITableViewを包んUIStackViewを追加ビューコントローラだったことに言及することを怠っ:

enter image description here

問題があることでしたUIStackViewの上端から親ビューの上端まで作成した制約はちょっと大きすぎ、UIStackViewの上端を押してその小さなスライバーを公開しました。私は63にYの距離を減少させ、それが今で完璧です:

enter image description here

おかげで再び支援しようとするために。

関連する問題