Размер UIToolbar, чтобы соответствовать его элементам? - PullRequest
5 голосов
/ 09 февраля 2011

Я пытаюсь найти чистый способ сделать UIToolbar настолько широким, насколько это необходимо для размещения элементов, которые в нем содержатся.Есть ли способ:

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

Я не смог выяснить это из-за расстояния между элементами и того факта, что UIBarButtonItem s не UIView подклассы.

Ответы [ 3 ]

2 голосов
/ 18 августа 2011

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

//Add bar items to toolbar first.

UIView* v = toolbar.subviews.lastObject;
float newWidth = v.frame.origin.x + v.frame.size.width;

//Set toolbar width

Вам нужно будет переопределить UIToolbar -setItems: или иным образом обнаружить измененные кнопки для автоматического изменения размера.

Я включил эту функцию в мою библиотеку рефакторинга, es_ios_utils , чтобы установить правильный элемент элемента навигации с помощьюнесколько кнопок.В предыдущей ссылке см. UIToolbar +toolbarWithItems: и UINavigationItem -setRightBarButtonItems.

0 голосов
/ 08 ноября 2017

Swift 3, 4 обновления

У меня есть панель инструментов с barButtonItem, инициированная с изображением. Все, что мне нужно сделать, это рассчитать общую ширину изображений плюс интервалы (поля).

Поля по умолчанию 11 в ширину. Код будет:

let width: CGFloat = YourBarButtonItemList.reduce(0) {sofar, new in
    if let image = new.image {
        return sofar + image.size.width + 11
    } else {
        return sofar + ADefaultValueIfThisDoesntWork + 11
    }
}
0 голосов
/ 21 мая 2011

Я только что проверил документацию и похоже на UIBarButtonItems, хотя они не являются подклассами UIView, они имеют атрибут width . Я не пробовал сам, но я думаю, что вы могли бы суммировать ширину каждого элемента, включая гибкий элемент, и получить ширину для вашей панели инструментов. Надеюсь, поможет! ;)

...