Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何完全隐藏此UIImageView_Swift_Uiimageview_Nslayoutconstraint - Fatal编程技术网

Swift 如何完全隐藏此UIImageView

Swift 如何完全隐藏此UIImageView,swift,uiimageview,nslayoutconstraint,Swift,Uiimageview,Nslayoutconstraint,我有一个UITableView,其中包含可以筛选的项目列表。当用户选择过滤器时,将使用从0到40像素的高度NSLAYOUT约束显示UIView: 带有X的圆圈是清除按钮,用于清除过滤器,然后通过将高度约束更改回0来关闭UIView 问题是当ui视图关闭时,清除按钮不会完全消失: 以下是相关代码: class LiftLogViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, NSFetche

我有一个
UITableView
,其中包含可以筛选的项目列表。当用户选择过滤器时,将使用从0到40像素的高度NSLAYOUT约束显示UIView:

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

问题是当
ui视图
关闭时,清除按钮不会完全消失:

以下是相关代码:

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,但这两种方法都无法使其完全消失


搜索了一段时间没有得到任何答案。有人能指出我在做什么吗?谢谢。

导航栏上的发际线颜色可能很清晰,导致按钮仍然略微可见。也许换一下,看看它是否盖住了按钮。您可以这样做:

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

看起来导航栏上的发际线颜色可能很清晰,导致按钮仍然略微可见。也许换一下,看看它是否盖住了按钮。您可以这样做:

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

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

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

谢谢大家的建议。结果发现解决方案有点不同,但你的建议让我在这方面多做了一些探索,并找到了解决方案

我忽略了提到这是一个视图控制器,我添加了一个
UIStackView
,它包装了我的
UIView
(灰色的“过滤者”
UIView
)和
UITableView

问题是,我从
UIStackView
顶部到其父视图顶部创建的约束太大了,将
UIStackView
顶部推得太远,足以暴露出这一小部分。我将Y距离减少到63,现在已经很完美了:


再次感谢你们的帮助。

谢谢你们的建议。结果发现解决方案有点不同,但你的建议让我在这方面多做了一些探索,并找到了解决方案

我忽略了提到这是一个视图控制器,我添加了一个
UIStackView
,它包装了我的
UIView
(灰色的“过滤者”
UIView
)和
UITableView

问题是,我从
UIStackView
顶部到其父视图顶部创建的约束太大了,将
UIStackView
顶部推得太远,足以暴露出这一小部分。我将Y距离减少到63,现在已经很完美了:


再次感谢您的帮助。

关闭时将
UIButton
图像设置为零,打开时再次设置,或将等高设置为
UIView
。关闭时将
UIButton
图像设置为零,打开时再次设置,或将等高设置为
UIView