使 UIPickerView 宽度填满视图

Make UIPickerView width fill the view

我是 iOS 开发的新手,我遇到了图形问题: 我创建了一个显示在 google 地图视图上方的 UIPickerView。我想让选择器视图宽度与主视图宽度相匹配。 目前,选择器总是占据视图的 3/4,并且位于左上角:

我尝试这样做:

func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
    return self.view.bounds.width
}

但这是结果:

这是我想要的: 任何的想法?是否可以在故​​事板而不是 swift 中设置它?

您可以为 uipickerview 创建约束。 select 选择器视图并设置以下约束。您可以在情节提要中设置约束。

尾随 space:0 前导 Space :0 巴顿 Space:0

https://www.raywenderlich.com/115444/auto-layout-tutorial-in-ios-9-part-2-constraints

你的问题不是组件的宽度,self.view.bounds.width已经解决了,你有布局问题。

检查选择器视图的自动布局约束,如果使用 Xcode 自动设置约束,则可能具有固定值宽度或高度约束。

如果您以编程方式添加了 pickerView,请检查您的框架是否具有与视图相同的宽度,或者约束是否正确(参见 Sharat 的回答)

编辑:以编程方式设置 pickerView 宽度的代码 -

//call this in viewDidLoad
func resizePickerViewToScreenWidth(){
     let oldFrame = airspacePicker.frame
     var newFrame = oldFrame
     newFrame.size.width = view.frame.size.width
     airspacePicker.frame = newFrame
}

编辑 2:以编程方式创建 pickerView 的代码

var airspacePicker: UIPickerView!

override func viewDidLoad() {
    super.viewDidLoad()
    createPickerView()
}

func createPickerView() {
    airspacePicker = UIPickerView(frame: CGRect(origin: CGPointZero, size: CGSize(width: view.frame.width, height: 220.0)))
    airspacePicker.backgroundColor = UIColor.blackColor()
    airspacePicker.autoresizingMask = .FlexibleWidth
    view.addSubview(airspacePicker)
}