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
。