代码之家  ›  专栏  ›  技术社区  ›  Osama Naeem

如何仅在设置parentView框架时设置子视图的框架?

  •  0
  • Osama Naeem  · 技术社区  · 7 年前

    基本上,我正在创建一个Tinder风格的布局,其中UIView堆叠在彼此的顶部。为了获得圆形UIView后面的阴影,我创建了一个自定义UIView,名为 MainSwipeCardView 它由两个视图组成。一个叫做 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是MainsViewSpecardView类的自定义视图。此视图中的内容(简单的阴影UIView和自定义SwipeCardView)需要根据父视图的框架设置其框架。我不能正确地做到这一点。

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

    0 回复  |  直到 7 年前
        1
  •  1
  •   Digs    7 年前

    我想你可以利用房地产观察员

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

    确保在访问parentView属性之前初始化它