仅当设置了parentView框架时,如何设置子视图的框架?

时间:2019-03-18 18:30:40

标签: ios swift uiview frame bounds

基本上,我正在创建一个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)需要根据父视图的框架设置其框架。我无法正确执行此操作。

问题: 仅在设置了父视图的框架后,才能设置两个自定义子视图的框架。由于父视图的框架不同(取决于索引),因此我希望子视图的大小也相应地更改。

1 个答案:

答案 0 :(得分:1)

我认为您可以利用属性Observers

let parventViewFram = parentView.bounds { didSet {
   //add your custom Subviews or edit your custom subviews by calling layoutSubviews
}}

确保在访问父视图的属性之前对其进行初始化