Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我真的必须为UIView的每个子视图添加子视图吗?_Ios_Swift_Storyboard - Fatal编程技术网

Ios 我真的必须为UIView的每个子视图添加子视图吗?

Ios 我真的必须为UIView的每个子视图添加子视图吗?,ios,swift,storyboard,Ios,Swift,Storyboard,我有一个映射框视图,我正在设置它,然后将其添加为子视图。我认为在添加Mapbox视图时,该视图的子视图也会被添加是合理的。但是,似乎我需要为第一个视图的每个子视图调用addSubView 以下是我的ViewController.swift的全部内容: import UIKit class ViewController: UIViewController { @IBOutlet weak var locationButton: UIButton! @IBOutlet weak

我有一个映射框视图,我正在设置它,然后将其添加为子视图。我认为在添加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的情况吗?如果我有一堆纽扣呢?我真的必须以编程方式添加每一个吗?我做错了什么?

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

我删除了我的ViewController,添加了一个新的,链接了所有的IBoutlet,现在它工作正常了。我一定是把第一个ViewController弄糟了。

在使用IBOutlets时,您似乎已经将视图添加到了情节提要。@Sweeper视图在情节提要中,您是对的,但是它们在运行时不会出现,除非我添加子视图。您是否在情节提要的属性检查器中输入了样式URL?该按钮将作为情节提要的结果出现在视图层次结构中,但您添加的地图视图的边界等于整帧,因此该按钮将位于其后面,因此不可见。您应该能够将UIView添加到情节提要中,并将其自定义类设置为MGLMapView,然后在中设置任何所需的属性viewDidLoad@Paulw11情节提要中的地图视图是MGLMapView类型,除非它是情节提要入口点,否则所有视图都可以工作,在这种情况下,我无法更改其属性。有没有办法让按钮像在情节提要中一样出现在地图视图的前面?我尝试了view.BringSubview到FrontButtonView,但这并没有改变任何事情。我想我只是认为这就是孩子们的全部想法。该按钮是该视图的子视图,它是另一个视图的子视图。我以为XCode会知道把它们放在哪里,因为我把它们拖到了故事板上。显然这不是统一,但在统一中,当你实例化一个预置时,它的所有子对象都被实例化,并附加到它。谢谢你的回答。啊,现在我明白了!您的问题可能与缺少布局约束或配置错误的自动布局有关。更多信息: