Невозможно подкрасить индивидуальный вид в Uibarbuttonitem в iOS 26IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно подкрасить индивидуальный вид в Uibarbuttonitem в iOS 26

Сообщение Anonymous »

Под iOS 26 внешний вид навигационных стержней и панелей инструментов немного изменился. Я сталкиваюсь с проблемой, пытаясь отточить добавленные элементы. Для экземпляров «Standard» uibarbuttonitem вы просто устанавливаете Tintcolor , и он работает нормально. Например: < /p>

Код: Выделить всё

let itemText = UIBarButtonItem(title: "Text")
itemText.tintColor = .systemGreen
< /code>
Текст будет выглядеть зеленым на панели инструментов или навигации. То же самое, что и ожидалось, если создано с изображением символа SF. Я экспериментировал с UIBUTTON 
, UISEGMENTCONTROL и UISWITCH . Если я создаю и затеняет такие элементы управления и добавлю их в представление контроллера представления, цвета работают, как и ожидалось. Когда те же цветные элементы управления используются с UibarButtonItem (CustomView :) и добавляются в Navbar или панель инструментов, тогда все цвета теряются (как ни странно, за исключением UISWITCH OnTintColor ).
Я не хватает правильного способа, используемого в этом виде, или в этой проблеме. /> Вот какой -то пример кода, чтобы продемонстрировать проблему. Создайте новый проект для раскадровки приложения для iOS в XCode 26. Настройка раскадровки для отображения контроллера навигации с помощью контроллера просмотра в качестве корня. Замените код ViewController следующим образом: < /p>

Код: Выделить всё

import UIKit

class ViewController: UIViewController {
func createButton() -> UIButton {
var cfg = UIButton.Configuration.plain()
cfg.image = UIImage(systemName: "eye")
let button = UIButton(configuration: cfg)

return button
}

func createSegment() -> UISegmentedControl {
let i1 = UIImage(systemName: "eye")!
let i2 = UIImage(systemName: "eye")!
let seg = UISegmentedControl(items: [i1, i2])
seg.selectedSegmentIndex = 0
return seg
}

override func viewDidLoad() {
super.viewDidLoad()

view.backgroundColor = .systemBackground

let b1 = createButton()
b1.tintColor = .systemRed
b1.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(b1)

let s1 = createSegment()
s1.selectedSegmentTintColor = .systemYellow
s1.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(s1)

let w1 = UISwitch()
w1.onTintColor = .systemCyan
w1.thumbTintColor = .systemPink
w1.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(w1)

NSLayoutConstraint.activate([
b1.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor),
b1.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor),
s1.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor),
s1.topAnchor.constraint(equalTo: b1.bottomAnchor, constant: 20),
w1.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor),
w1.topAnchor.constraint(equalTo: s1.bottomAnchor, constant: 20),
])

// Despite all these attempts to set a color, the views in the navbar remain black
let b2 = createButton()
b2.tintColor = .systemRed // Nope
let nb1 = UIBarButtonItem(customView: b2)
nb1.tintColor = .systemYellow // Nope

let s2 = createSegment()
s2.selectedSegmentTintColor = .systemRed // Nope
let nb2 = UIBarButtonItem(customView: s2)
nb2.tintColor = .systemMint // Nope

let w2 = UISwitch()
w2.onTintColor = .systemCyan // This actually works
w2.thumbTintColor = .systemPink // But this doesn't
let nb3 = UIBarButtonItem(customView: w2)
nb3.tintColor = .systemBrown // Neither does this

let nb4 = UIBarButtonItem(title: "Text")
nb4.tintColor = .systemGreen // This works on the text if not changed below with the titleTextAttributes

navigationItem.rightBarButtonItems = [nb1, nb3]
navigationItem.leftBarButtonItems = [nb2, nb4]

self.navigationController?.navigationBar.tintColor = .systemRed // Nothing
self.navigationController?.navigationBar.barTintColor = .systemYellow // Nothing

// This works on the text color but not the others
self.navigationController?.navigationBar.standardAppearance.buttonAppearance.normal.titleTextAttributes = [ .foregroundColor : UIColor.systemPurple ]
}
}
< /code>
Запустите это на симуляторе или устройстве iOS 26. В центре экрана будет отображаться правильно окрашенная кнопка, сегментированный элемент управления и Swift. Но это не включает в себя пользовательский представление. />  Настройка tintcolor 
каждого Uibarbuttonitem , созданный с помощью пользовательского представления, не имеет эффекта.


Подробнее здесь: https://stackoverflow.com/questions/796 ... -in-ios-26
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Разное появление Uibarbuttonitem в iOS 26 Beta 4 по сравнению с версией iOS 18 - как сохранить стиль iOS 18?
    Anonymous » » в форуме IOS
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Получите событие, когда отображается меню UIBarButtonItem
    Anonymous » » в форуме IOS
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как изменить ограничения UIBarButtonItem?
    Anonymous » » в форуме IOS
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как изменить ограничения UIBarButtonItem?
    Anonymous » » в форуме IOS
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как изменить ограничения UIBarButtonItem?
    Anonymous » » в форуме IOS
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»