基本上,我正在创建一个Tinder式的布局,UIViews堆栈彼此叠置。为了在圆形UIView后面留下阴影,我创建了一个名为MainSwipeCardView
的自定义UIView,它由两个视图组成。一个叫做SwipeCardView
,后面是ShadowView.
然后,我依次创建MainSwipeCardView的一个实例并设置它的框架。
func addCardFrame(index: Int, cardView: MainSwipeCardView){
cardsView.append(cardView)
var cardViewFrame = bounds
let horizontalInset = (CGFloat(index) * self.horizontalInset)
let verticalInset = CGFloat(index) * self.verticalInset
cardViewFrame.size.width -= 2 * horizontalInset
cardViewFrame.origin.x += horizontalInset
cardViewFrame.origin.y += verticalInset
cardView.frame = cardViewFrame
}
根据卡的索引设置边框。顶部的将是最大的,然后底部的将具有一些水平和垂直插图等。
如您所见,我将cardView.frame = cardViewFrame
-cardViewFrame
设置为我们上面计算出的框架。但是,问题在于cardView是MainSwipeCardView类的自定义视图。该视图中的内容(一个简单的Shadow UIView和自定义SwipeCardView)需要根据父视图的框架设置其框架。我无法正确执行此操作。
问题: 仅在设置了父视图的框架后,才能设置两个自定义子视图的框架。由于父视图的框架不同(取决于索引),因此我希望子视图的大小也相应地更改。
答案 0 :(得分:1)
我认为您可以利用属性Observers
let parventViewFram = parentView.bounds { didSet {
//add your custom Subviews or edit your custom subviews by calling layoutSubviews
}}
确保在访问父视图的属性之前对其进行初始化