我正在尝试创建自定义下拉菜单。我的视图中会有几张卡片,在点击时应该有一个下拉菜单。
现在我的dropDownView
cardView.frame.maxY
为frame.origin.y
值,其高度为0,当我点击卡片视图时,我设置了{{1}的高度到动画中的真实高度值。
但这看起来有点丑陋,因为它看起来无处不在。我想让它滑出来。
我的意思是它立即具有原始大小并位于卡片视图下方(dropDownView
)当点击cardView时,cardView.frame.maxY = dropDownView.frame.maxY
向下滑动(dropDownView
)动画
问题是,dropDownView.frame.origin.y = cardView.frame.maxY
大于dropDownView
。因此当它位于cardView
后面时,它在cardView
上方可见。我试图说明问题:)
这是状态A(在点击视图A [cardView]之前)(视图C只是一些背景视图,应该在视图A的上方和下方可见)
这是状态B(点击cardView后)
任何想法如何解决这个问题?谢谢!
另外还有一些示例代码:
cardView
答案 0 :(得分:1)
我要做的是将View A和View B放在一个新视图中,我们可以调用这个containerView。
containerView应足够大以容纳A和B(当B向下移动时)。然后将containerView设置为在边界处剪辑。因此,当View B处于“向上”位置时,它位于View A后面,并被剪切在containerView的顶部。因此根本没有看到它。
一旦你准备好让View B放到它的“向下”位置,只需动画它就会向下移动,它会从View A的底部出来。因为containerView的框架会延伸到足够远的地方。容纳A和B(在它的向下位置),不会剪切任何内容,并且两个视图都可见。
card = CardView()
card.frame = self.bounds
card.addTarget(self, action: #selector(YellowTackleTicketComplete.ticketTapped), forControlEvents: .TouchDown)
dropDownMenu = DropDownView()
// I changed the frame to place it right underneath the card view
dropDownMenu.frame = CGRect(x: 0, y: card.frame.size.height - 350, width: self.bounds.width, height: 350)
dropDownMenu.hidden = true
dropDownMenu.backgroundColor = UIColor.clearColor()
let containerView = UIView()
containerView.frame = CGRect(x: 0, y: 0, width: bounds.width, height: card.frame.size.height + dropDownMenu.frame.size.height)
containerView.backgroundColor = nil
containerView.clipsAtBounds = true
containerView.addSubview(dropDownMenu)
containerView.addSubview(card)