【问题标题】:How do I completely hide this UIImageView如何完全隐藏这个 UIImageView
【发布时间】:2016-08-24 04:42:58
【问题描述】:

我有一个UITableView,其中包含可以过滤的项目列表。当用户选择一个过滤器时,一个 UIView 使用高度 NSLayoutConstraint 暴露出来,从 0 到 40 像素变化:

带 X 的圆圈是清除按钮,清除过滤器,然后通过将高度约束更改回 0 来关闭 UIView。

问题是当UIView 关闭时,那个清除按钮并没有完全消失:

以下是相关代码:

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

您可以看到我已经尝试将保持清除按钮的 UIView 上的 .hidden 值设置为 true,并且我尝试将高度约束更改为 0.0,但这些都没有让它完全消失。

搜索了一段时间没有得到任何答案。任何人都可以指出我正在做的事情有什么问题吗?谢谢。

【问题讨论】:

  • 在关闭时将UIButton图像设置为零,并在打开时再次设置或将相等高度设置为UIView

标签: swift uiimageview nslayoutconstraint


【解决方案1】:

导航栏上的细线颜色似乎很清晰,导致按钮仍然略微可见。也许改变它,看看它是否覆盖了按钮。你可以这样做:

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

【讨论】:

    【解决方案2】:

    正如 Dustin Spengler 所提到的,导航栏中的透明细线图像视图导致过滤器按钮在其下方略微可见。作为一种解决方法,您可以在约束常量设置为 0.0 时隐藏过滤器视图 (filterView.hidden = true) 并取消隐藏过滤器视图 (filterView.hidden = false)当约束常数设置为 40.0.

    【讨论】:

      【解决方案3】:

      谢谢大家的建议。事实证明,解决方案有点不同,但您的建议让我在该领域进行了更多探索并找到了解决方案。

      我没有提到这是一个视图控制器,我添加了一个 UIStackView 来包裹我的 UIView(灰色“过滤”UIView)和UITableView

      问题是我从UIStackView 的顶部到其父视图的顶部创建的约束稍微太大了,将UIStackView 的顶部推得刚好足以露出那个小条子。我将 Y 距离减小到 63,现在很完美:

      再次感谢您的帮助。

      【讨论】:

        猜你喜欢
        • 2019-07-22
        • 1970-01-01
        • 2011-08-16
        • 2014-12-01
        • 1970-01-01
        • 2014-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多