настройка изображения для UIBarButtonItem - изображение растянуто

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

25
задан Z S 18 August 2011 в 02:03
поделиться

3 ответа

Отображаемые изображения на элементах линейных кнопок «получены» из исходного изображения (при рендеринге используются только значения альфа-канала, но на вашем изображении все выглядит нормально). Возможно, он просто не подходящего размера - вам может понадобиться открыть файл изображения и обрезать его до нужного размера.

Вы также можете попробовать посмотреть, можно ли использовать настройку свойства imageInsets (унаследованного UIBarButtonItem из UIBarItem ) для настройки размера в способ остановить его растяжение.

Doco на изображениях элементов панели говорит следующее:

Изображения, отображаемые на панели, получены из этого изображения. Если это изображение слишком велико, чтобы поместиться на панели, оно масштабируется, чтобы соответствовать. Как правило, размер изображения панели инструментов и панели навигации составляет 20 х 20 точек.

12
ответ дан gamozzii 18 August 2011 в 02:03
поделиться

Я знаю, что этот вопрос уже имеет галочку с галочкой. Но я столкнулся с этим сегодня и подумал, что все равно предложу свой ответ. Помеченный ответ выше помог мне, но потребовались дополнительные эксперименты, чтобы выяснить, что на самом деле происходит.

Изображение кнопки сокращается только по оси x, а не по оси y. это потому, что он слишком высокий для кнопки и сжимает его, чтобы соответствовать. Но это не уменьшает его пропорционально. Только по вертикали. Так что кажется растянутым. Это на самом деле не растягивается - что подразумевает его расширение. Вместо этого высота уменьшается. Зная разницу, я думаю, важно понять, почему это происходит и как это исправить.

enter image description here

Я сделал то же самое, что и ОП. Думая, что я поддерживаю сетчатку, я сделал свою иконку 40х40. У меня была зеленая галочка с альфа-каналом. Он был дополнен пустыми пикселями до 40х40. Приложение изменило размеры, чтобы оно соответствовало доступной высоте кнопки. Но ширина осталась прежней. Так стало где-то в диапазоне 40х30 или 40х20. Я думаю, что кнопка может обрабатывать значок высотой 30, но тогда она слишком велика для коробки IMHO.

ОП уменьшил кнопку до 30х30, и это больше не давило нажатия. Но это не лучшее решение. Потому что на самом деле это не кнопка сетчатки, когда вы делаете это. Он сжимается, а затем взорван на сетчатке.

Правильный ответ - назовите версию 40 пикселей в высоту с @ 2x, а затем сделайте версию половинного (20 пикселей в высоту) и сохраните ее без @ 2x. Ширина может быть любой. Затем загрузите с imageNamed: без указания @ 2x. Он будет использовать соответствующий PNG для устройства сетчатки или не сетчатки.

Следующее, что случилось со мной, было то, что рамка кнопки была слишком маленькой. Поэтому я увеличил размер холста в psd, чтобы увеличить ширину png до 80, чтобы сделать кнопку немного шире и более легко нажимаемой.

10
ответ дан badweasel 18 August 2011 в 02:03
поделиться

Установите правильный размер изображения: @ 1x = 22px, @ 2x = 44px @ 3x = 88px.

Затем

let leftBarButtonItem = UIBarButtonItem(image: yourUIImage, style: .plain, target: self, action: #selector(action))
leftBarButtonItem.tintColor = UIColor.red
navigationItem.leftBarButtonItem = leftBarButtonItem

или

let btn = UIButton(type: .custom)
btn.addTarget(self, action: #selector(contactMe), for: .touchUpInside)
btn.setImage(#imageLiteral(resourceName: "open"), for: .normal)
2
ответ дан William Hu 18 August 2011 в 02:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: