首页 > 解决方案 > 自定义视图未正确显示

问题描述

我试图在 iOS 屏幕中显示 3 个自定义视图,但只有一个显示。第二个在放了很多之后开始以不正确的方式出现constraints,第三个完全没有出现。为了测试,我三次调用相同的视图。查看代码。我刚刚开始做 iO,所以如果我犯了任何错误或明显错误,请原谅我。

我试图相应地设置约束,在后面放置一个滚动视图,但这些似乎都不起作用

我得到这个结果 这是故事板屏幕截图和约束

我有卸妆容器 3,storyboard因为当我添加它时,容器 2 甚至没有出现一点点。请帮我解决这个布局问题。

class TestCustomViewController: UIViewController {

@IBOutlet weak var container : UIView?

@IBOutlet weak var container2 : UIView?

@IBOutlet weak var container3 : UIView?

var testView: CustomView!
var testView2: CustomView!
var testView3: CustomView!
override func viewDidLoad() {
    super.viewDidLoad()
    ////////First View//////
   testView = createGearItemView()
    testView.frame = (container?.frame)!
    container?.addSubview(testView)
    /////////Second View//////
    testView2 = createGearItemView()
    testView2.frame = (container2?.frame)!
    container2?.addSubview(testView2)
    ////// THird View/////////
    testView3 = createGearItemView()
    testView3.frame = (container3?.frame)!
    container3?.addSubview(testView3)
}

func createGearItemView () -> CustomView {
    let view = (Bundle.main.loadNibNamed("CustomView", owner: nil, options: nil)?.first as? CustomView)!

    view.backgroundColor = UIColor.clear
    return view
}

}

标签: iosswiftlayout

解决方案


除了您应该熟悉 Auto Layout(请参阅了解 Auto Layout)之外,您必须将容器的boundsasframe用于您的子视图(尽管它可能还不是正确的viewDidLoad):

testView.frame = (container?.bounds)!
...

更好的方法是为您的子视图使用自动布局,而不是frame直接设置 s:

testView = createGearItemView()
container?.addSubview(testView)
testView.translatesAutoresizingMaskIntoConstraints = false
testView.topAnchor.constraint(equalTo: container!.topAnchor).isActive = true
testView.leadingAnchor.constraint(equalTo: container!.leadingAnchor).isActive = true
testView.bottomAnchor.constraint(equalTo: container!.bottomAnchor).isActive = true
testView.trailingAnchor.constraint(equalTo: container!.trailingAnchor).isActive = true
testView2...

推荐阅读