Ios 调整UIPickerView字体大小

Ios 调整UIPickerView字体大小,ios,swift,uipickerview,Ios,Swift,Uipickerview,我看到了许多针对UIPickerView字体大小的解决方案,但它们似乎都基于基于文本的数组和/或需要UIViewController。 我在UITableViewCell中使用Int数组,似乎找不到与我试图实现的目标相匹配的东西 代码如下: import UIKit class AirTemperatureTableViewCell: UITableViewCell, UIPickerViewDelegate, UIPickerViewDataSource { let number

我看到了许多针对UIPickerView字体大小的解决方案,但它们似乎都基于基于文本的数组和/或需要UIViewController。 我在UITableViewCell中使用Int数组,似乎找不到与我试图实现的目标相匹配的东西

代码如下:

import UIKit


class AirTemperatureTableViewCell: UITableViewCell, UIPickerViewDelegate, UIPickerViewDataSource

{
    let numberOfComponents: Int             = 2
    let temperatureComponentRows: Int       = 501
    let temperatureSymbolComponentRows: Int = 2

    let Fahrenheit: String                  = "F"
    let Celsius: String                     = "C"
    let minDegrees                          = -250
    let maxDegrees                          = 250

    private var degrees: Array<Int>         = [Int]()

    var temperature: Int                    = 30    // our default temperature
    var temperatureType: String             = "C"   // our default type is Celsius

    @IBOutlet var airTemperaturePicker: UIPickerView!

    override func awakeFromNib()
    {
        super.awakeFromNib()


        for i in self.minDegrees ..< self.maxDegrees+1
        {
            self.degrees.append(i)
        }

        self.airTemperaturePicker.selectRow(280, inComponent: 0, animated: true)
    }


    override func setSelected(selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)
    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int
    {
        return self.numberOfComponents
    }


    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
    {
        if component == 0
        {
            return self.temperatureComponentRows
        }
        else
        {
            return self.temperatureSymbolComponentRows
        }
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
    {
        //
        //  If we are component 0, the degrees, return the value for the given row.
        //
        if component == 0
        {
            return String(self.degrees[row])
        }
        else
        {
            if row == 0
            {
                return self.Celsius
            }
            else
            {
                return self.Fahrenheit
            }
        }
    }


    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    {
    }
}
导入UIKit
类别AirTemperatureTableViewCell:UITableViewCell、UIPickerViewDeleteGate、UIPickerViewDataSource
{
设numberOfComponents:Int=2
设温度组件行:Int=501
设温度SYMBOLComponentRows:Int=2
让华氏温度:String=“F”
设为:String=“C”
让minDegrees=-250
设maxDegrees=250
私有变量度:数组=[Int]()
变量温度:Int=30//我们的默认温度
var temperatureType:String=“C”//我们的默认类型是摄氏度
@IBVAR出口空气温度Epicker:UIPickerView!
重写func awakeFromNib()
{
super.awakeFromNib()
对于self.minDegrees中的i.Int
{
返回self.numberOfComponents
}
func pickerView(pickerView:UIPickerView,numberOfRowsInComponent:Int)->Int
{
如果组件==0
{
返回self.temperatureComponent行
}
其他的
{
返回自身温度SYMBOL组件行
}
}
func pickerView(pickerView:UIPickerView,titleForRow行:Int,forComponent组件:Int)->String?
{
//
//如果我们是组件0,则返回给定行的值。
//
如果组件==0
{
返回字符串(self.degrees[行])
}
其他的
{
如果行==0
{
返回自我。摄氏度
}
其他的
{
返回自身华氏温度
}
}
}
func pickerView(pickerView:UIPickerView,didSelectRow行:Int,不完整组件:Int)
{
}
}

任何帮助都将不胜感激。

您应该在
UITableViewCell
子类中使用
UIPickerViewDelegate
函数
viewForRow
,如下所示:

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
   let view = UIView(frame: picker.frame)
   let label = UILabel(frame: picker.frame)
   label.textAlignment = .Center
   label.text = String(degrees[row])
   label.font = UIFont(name: "Arial", size: 15)
   label.adjustsFontSizeToFitWidth = true
   view.addSubview(label)

   return view
}
picker
是一个
@IBOutlet
,用于
UITableView
子类集中的
UIPickerView
,使用原型单元格或外部nib和控件拖动。另外,请确保在
awakeFromNib
中设置
选择器
委托
数据源
属性

override func awakeFromNib() {
    super.awakeFromNib()
    picker.dataSource = self
    picker.delegate = self
    //Your Code Below
}

这将使用您选择的UILabel创建单元格宽度pickerView。

您可以将UILabel与UIPickerViewData源的viewForRow方法一起使用。然后,您可以使用所有常规标签选项对其进行配置,包括设置字体大小、颜色等:

// goes in lieu of titleForRow if customization is desired
func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {

    let pickerLabel = UILabel()

    if component == 0 {

        pickerLabel.textColor = .darkGrayColor()
        pickerLabel.textAlignment = .Center
        pickerLabel.text = String(self.degrees[row])
        pickerLabel.font = UIFont(name:"Helvetica", size: 28)
    } else {

        pickerLabel.textColor = .redColor()
        pickerLabel.textAlignment = .Center
        pickerLabel.font = UIFont(name:"Helvetica", size: 28)

        if row == 0 {
            pickerLabel.text = self.Celsius
        } else {
            pickerLabel.text = self.Fahrenheit
        }
    }
    return pickerLabel
}

谢谢,艾克。我尝试了这个方法,但是“label.text=degrees[row]”返回一个错误,即我无法将“int”类型的值分配给“string”类型。抱歉,遗漏了一些内容。查看我的编辑@戴维桑福德。您需要将数字转换为字符串。更好的是,它修复了int-to-String错误。但现在,出于某种奇怪的原因,什么也没有显示。我在字体名称上加上了“Arial”,但还是不走运。我想我可能发现了一个问题。有两个组件,一个是int,一个是字符串。你能重新发布原始版本吗?这样我就可以用它作为字符串选项了?@DavidSanford查看我的编辑。虽然使用外部NIB文件比较复杂,但这与我的答案有什么不同吗?Caxix,我删除了…而且效果很好。唯一的问题是我丢失了我的“C”或“F”符号。我怎样才能让他们回来?我在else子句中用这些案例更新了我的答案。您可能需要使用自定义颜色、对齐方式等进行一些附加格式设置。。