Почему в окне выбора не отображается атрибутивная строка? - PullRequest
0 голосов
/ 12 апреля 2019

Существует одна запись о переполнении стека, уже решающая эту проблему, но она не решила проблему, она обошла ее. реализован заголовок, присвоенный строке в представлении средства выбора, не изменил шрифт?

Почему обратный вызов pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) не показывает правильный шрифт.

Вот мой код:

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {  

    if component == 0 {  
        print(keysDataSource[row])  
        return keysDataSource[row]  
    } else {  
        print(chordsDataSource[row])  
        return chordsDataSource[row]  
    }  

}  

Вот результаты в окне отладки, показывающие результат оператора print при вызове этой функции обратного вызова:

vi{
    NSFont = "<UICTFont: 0x113d55700> font-family: \"Times New Roman\"; font-weight: normal; font-style: normal; font-size: 30.00pt";
}

Проблема видна на скриншоте. Атрибуты не все показывают. Атрибут смещения базовой линии отображается, но не отображается ни один из атрибутов шрифта. Вместо этого он показывает системный шрифт. Обратите внимание на буквы b и L, которые должны обозначаться как плоский музыкальный символ и уменьшенный музыкальный символ соответственно.

screenshot picker view

1 Ответ

0 голосов
/ 12 апреля 2019

Даниэль Брауэр

используйте оба метода для заголовка, потому что представление выбора - это получение первого titleForRow.

используйте такой код.

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
       return pickerViewObj.keys[row]
    }

    func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
        let attributedString = NSAttributedString(string: pickerViewObj.keys[row], attributes: [NSAttributedStringKey.foregroundColor : UIColor.black])
        return attributedString
    }

OR

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    let pickerLabel = UILabel()
    pickerLabel.font = UIFont.boldSystemFont(ofSize: 13)
    pickerLabel.textColor = UIColor.black
    pickerLabel.textAlignment = .center
    pickerLabel.text = "PickerView Cell Title"

    return pickerLabel
}

Я надеюсь, что этот код будет работать.

...