【问题标题】:Adjust UIPickerView font size调整 UIPickerView 字体大小
【发布时间】:2016-06-24 02:21:13
【问题描述】:

我看到许多 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)
    {
    }
}

任何帮助将不胜感激。

【问题讨论】:

    标签: ios swift uipickerview


    【解决方案1】:

    您可以将 UILabel 与 UIPickerViewDataSource 的 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
    }
    

    【讨论】:

    • 这与我的答案有何不同?
    • Caxix,我删除了 ...,它工作正常。唯一的问题是我丢失了“C”或“F”符号。我怎样才能让它们重新进入?
    • 我在 else 子句中用这些案例更新了我的答案。您可能需要使用自定义颜色、对齐方式等进行一些额外的格式化。
    【解决方案2】:

    您应该在您的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 的 UIPickerView 在您的 UITableView 子类集中使用原型单元或外部笔尖和控制拖动。另外,请确保在awakeFromNib 中设置picker 的delegate 和dataSource 属性。

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

    这应该会生成一个单元格宽度选择器视图,其中包含您选择的字体 UILabel。

    【讨论】:

    • 谢谢,艾克。我试过了,但是“label.text = degree[row]”返回一个错误,我无法将“int”类型的值分配给“string”类型
    • 抱歉遗漏了一些东西。请参阅我的编辑。 @大卫桑福德。您需要将数字转换为字符串。
    • 更好的是这修复了 int 到 String 错误。但是现在,由于某种奇怪的原因,什么都没有显示。我在字体名称中添加了“Arial”,但仍然没有运气。
    • 我想我可能发现了一个问题。有两个组件,一个是 int,一个是 string。您可以重新发布原始的,以便我可以用作字符串选项吗?
    • @DavidSanford 查看我的编辑。尽管它更复杂,但请考虑使用外部 Nib 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多