2016-08-24 2 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 값을 설정 시도하고 I 0.0하지만도를 높이 제약 조건을 변경하려고했습니다 볼 수 있습니다 그것들은 완전히 사라져 버렸습니다.

잠시 동안 검색 한 결과가 없습니다. 아무도 내가하고있는 일에 무엇이 잘못되었는지 지적 할 수 있습니까? 감사.

+0

'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

의견을 보내 주셔서 감사합니다. 솔루션이 조금씩 다르다는 것이 드러났지만 제안 사항을 통해 해당 영역에서 더 많은 것을 둘러보고 솔루션을 찾을 수있었습니다.

enter image description here

문제는 그 것이었다 :

나는 이것이 내가 감싸 UIStackView 내 ( UIView "필터링"회색)와 UITableViewUIView 추가하는 뷰 컨트롤러라고 언급 무시 UIStackView 상단에서 부모보기 상단까지 생성 된 제약 조건이 약간 너무 커서 약간의 슬라이버가 노출 될 정도로 멀리 떨어져있는 UIStackView 상단을 밀었습니다. 나는 63에 Y 거리를 감소하고 지금은 완벽 :

enter image description here

다시 한번 감사 도우려고합니다.

관련 문제