开发者社区> 问答> 正文

导致视图重叠的addArrangedSubview

我有一个xib包含stackview叫newContainerView...当我尝试向它添加自定义视图时stackview使用addArrangedSubview它们相互堆积在一起,而不是像预期的那样垂直堆叠。因此,我用完全相同的代码创建了一个简单的测试项目,它运行得非常完美。我增加了高度和宽度约束,更改了translatesAutoresizingMaskIntoConstraints并比较这两个项目之间的每个设置。十次。

唯一的区别是,在实际项目中,容器视图被添加到UIViews...在示例项目中,只显示视图。但我看不出这会有什么不同的行为。

有人能解释一下为什么这段代码不起作用吗?

enter image description here

func makePhotoSheet(quote: Quote) {
   let newContainerView = ContainerView(frame: CGRect(x: 0, y: 0, width: 612, height: 792))

   //In the sample project, this replaces the line above
   let newContainerView = ContainerView(frame: view.bounds)
   view.addSubview(newContainerView)
   //End sample project code

   let testView1 = TestView()
   let testView2 = TestView()

   testView1.photo.image = UIImage(named: "bird")
   testView1.photoCaption.text = "Bird"
   testView1.heightAnchor.constraint(equalToConstant: 200).isActive = true
   testView1.widthAnchor.constraint(equalToConstant: 1).isActive = true
   testView1.translatesAutoresizingMaskIntoConstraints = false

   testView2.photo.image = UIImage(named: "heart")
   testView2.photoCaption.text = "Heart"
   testView2.heightAnchor.constraint(equalToConstant: 200).isActive = true
   testView2.widthAnchor.constraint(equalToConstant: 1).isActive = true
   testView2.translatesAutoresizingMaskIntoConstraints = false

   containerView.photoViewStackView.addArrangedSubview(testView1)
   containerView.photoViewStackView.addArrangedSubview(testView2)

   pdfPages.append(containerView)
}
这是自定义视图的XIB类,后面跟着XIB

class PhotoView: UIView {

   @IBOutlet var contentView: UIView!
   @IBOutlet weak var photo: UIImageView!
   @IBOutlet weak var photoCaption: UITextView!

   override init(frame: CGRect) {
      super.init(frame: frame)
      setup()
   }

   required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      setup()
   }

   func setup() {
      Bundle.main.loadNibNamed("PhotoView", owner: self, options: nil)
      contentView.frame = self.bounds
      addSubview(contentView)
   }
}

这是容器视图的XIB类。

class PhotoSheet: UIView {

   @IBOutlet var contentView: UIView!
   @IBOutlet weak var photoViewStackView: UIStackView!

   override init(frame: CGRect) {
      super.init(frame: frame)
      setup()
   }

   required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      setup()
   }

   func setup() {
      Bundle.main.loadNibNamed("PhotoSheet", owner: self, options: nil)
      contentView.frame = self.bounds
      addSubview(contentView)
   }
}

展开
收起
游客5akardh5cojhg 2019-12-05 13:03:09 649 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载