【问题标题】:Do I really have to addSubView for each child of a UIView?我真的必须为 UIView 的每个孩子添加SubView吗?
【发布时间】:2021-05-30 21:26:33
【问题描述】:

我有一个 Mapbox 视图,我正在设置它然后添加为子视图。我认为在添加 Mapbox 视图时也可以添加该视图的子视图是合理的。但是,似乎我需要为第一个视图的每个子视图调用 addSubView。

这是我的 ViewController.swift 的全部内容:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var locationButton: UIButton!
    @IBOutlet weak var buttonView: UIView!
    @IBOutlet var mapView: MGLMapView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let url = URL(string: "mapbox://styles/billofbong/xxx/draft")
        mapView = MGLMapView(frame: view.bounds, styleURL: url);
        mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        mapView.setCenter(CLLocationCoordinate2D(latitude: xxx, longitude: -xxx), zoomLevel: 15, animated: false)
        mapView.showsUserLocation = true
        mapView.showsHeading = true;
        view.addSubview(mapView)
        view.addSubview(buttonView)
    }
    
    @IBAction func onLocationButtonPressed(_ sender: Any) {
        mapView.userTrackingMode = .followWithHeading
    }
    

}

我将 Mapbox 视图添加为子视图而不是仅将其作为 ViewController 中的原始视图的原因是,当它是活动视图时,更改参数似乎没有任何作用,所以我被卡住了默认地图参数。

这是我的故事板的屏幕截图:

谁能解释一下 addSubView 的情况?如果我有一堆按钮怎么办?我真的必须以编程方式添加每一个吗?我做错了什么?

【问题讨论】:

  • 您似乎已经将视图添加到情节提要中,因为您正在使用 IBOutlets。
  • @Sweeper 视图在情节提要中,你是对的,但除非我执行 addSubView(),否则它们不会在运行时出现
  • 您是否在情节提要的属性检查器中输入了 styleURL?
  • 该按钮将作为情节提要的结果位于视图层次结构中,但您正在添加边界等于整个框架的地图视图,因此该按钮将位于其后面,因此不可见。您应该能够将UIView 添加到您的故事板并将其自定义类设置为MGLMapView,然后在viewDidLoad 中设置任何所需的属性
  • @Paulw11 情节提要中的地图视图类型为MGLMapView——除非它是情节提要入口点,否则一切正常,在这种情况下我无法更改其属性。有没有办法让按钮出现在地图视图的前面,就像它在情节提要中一样?我试过view.bringSubviewToFront(buttonView) 并没有改变任何东西。

标签: ios swift storyboard


【解决方案1】:

是的,您必须将每个按钮添加到您的视图中。 XCode 应该如何自行确定这些元素的位置?

【讨论】:

  • 我想我只是认为这就是孩子们的全部想法。该按钮是视图的子视图,它是另一个视图的子视图。我认为 XCode 会知道将它们放在哪里,因为我将它们拖到了故事板上。显然这不是统一的,但在统一中,当你实例化一个预制件时,它的所有子代都会用它实例化,并附加到它上面。感谢您的回答。
  • 啊,现在我明白了!您的问题可能与缺少布局约束或配置错误的自动布局有关。更多信息:developer.apple.com/documentation/uikit/nslayoutconstraintdeveloper.apple.com/library/archive/documentation/…
【解决方案2】:

我删除了我的ViewController,添加了一个新的,链接了所有的 IBOutlets,现在它可以正常工作了。我一定是把第一个 ViewController 搞砸了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 2020-01-09
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多