来自XIB的自定义UIView加载具有巨大的子视图比例

时间:2016-02-18 19:32:01

标签: ios swift animation uiview uicollectionviewcell

我遇到了自定义UIView实现的问题。我想要做的是动画UICollectionViewCell,并在单元格缩放后创建一个新视图,并在另一侧“翻转”。 (将UICollectionViewCells视为卡片)。

我成功地设法实现了所需的动画。但是,当我在XIB文件的代码中创建一个视图时,似乎会应用约束,但是所有内容的大小都会被炸毁。我将标签的最小字体比例设置为0.2,但它似乎不起作用。

这是IB中设计的视图:

View designed in IB with constraints

现在,当动画开始向单元格视图添加新的CardBackView时,我得到的是:

The horrendous result

这是执行动画并添加卡片后视图的代码:

// now flip card and show other side of card
            UIView.transitionWithView(cell, duration: duration, options: [.BeginFromCurrentState, .TransitionFlipFromRight, .CurveEaseInOut], animations: { () -> Void in

                let cardBackView = NSBundle.mainBundle().loadNibNamed("CardBackView", owner: self, options: nil).first as! CardBackView
                cardBackView.frame = cell.bounds
                cardBackView.titleLabel.text = movie.title
                cardBackView.titleLabel.textColor = UIColor.whiteColor()
                cardBackView.overviewLabel.text = movie.overview
                cardBackView.backgroundColor = UISettings.TabBarColor
                cell.addSubview(cardBackView)

                }, completion: nil)

1 个答案:

答案 0 :(得分:0)

当您将CardBackView添加到Cell时,它假定您将自动调整遮罩转换为约束,因此它可能表现得很奇怪。要解决此问题,您需要为CardBackView创建约束并将它们添加到您的Cell(它的父级)。

如果您的CardBackView应使用与Cell相同的大小,那么这样的事情应该有效:

cardBackView.translatesAutoresizingMaskIntoConstraints = false
cell.addConstraint(NSLayoutConstraint(item: cardBackView, attribute: .Top, relatedBy: .Equal, toItem: cell, attribute: .Top, multiplier: 1, constant: 0))
cell.addConstraint(NSLayoutConstraint(item: cardBackView, attribute: .Bottom, relatedBy: .Equal, toItem: cell, attribute: .Bottom, multiplier: 1, constant: 0))
cell.addConstraint(NSLayoutConstraint(item: cardBackView, attribute: .Left, relatedBy: .Equal, toItem: cell, attribute: .Left, multiplier: 1, constant: 0))
cell.addConstraint(NSLayoutConstraint(item: cardBackView, attribute: .Right, relatedBy: .Equal, toItem: cell, attribute: .Right, multiplier: 1, constant: 0))