Есть ли способ изменить высоту UIToolbar? - PullRequest
59 голосов
/ 25 января 2010

У меня есть UIToolbar в Интерфейсном Разработчике, и я заметил, что он имеет высоту 44px. Конечно, я хотел бы сделать это больше.

Разрешает ли Apple изменение размера этого элемента управления? Если да, то как мне это сделать?

Ответы [ 10 ]

64 голосов
/ 26 января 2010

Конечно, просто установите его рамку по-другому:

[myToolbar setFrame:CGRectMake(0, 50, 320, 35)];

Это сделает вашу панель инструментов 35 пикселей в высоту. Конечно, для этого требуется IBOutlet или программное создание UIToolbar, но это очень легко сделать.

46 голосов
/ 13 апреля 2013

Если это не работает в SDK 6, можно решить, как показано ниже:

Выберите элемент панели инструментов и выберите «Редактор»> «PIN-код»> «Высота», чтобы создать ограничение. Перейдите к своей сцене View Controller Scene и выберите созданное ограничение высоты (44), а затем введите желаемое значение.

38 голосов
/ 18 мая 2011

Я обнаружил, что, если я установлю рамку на iPad, при скрытии / показе панели инструментов сам вернется к высоте 44 пикселя. Мне пришлось переопределить UIToolbar и изменить метод:

// return 'best' size to fit given size. does not actually resize view. Default is return existing view size
- (CGSize)sizeThatFits:(CGSize)size {
    CGSize result = [super sizeThatFits:size];
    result.height = 55;
    return result;
};     

Это корректирует настройку высоты даже при скрытии / показе.

15 голосов
/ 25 апреля 2013

В iOS 6 с функцией автоматического размещения самым простым является подкласс UIToolbar, в котором вы переопределяете instrinsicContentSize. Вот код из одного моего приложения, где панель инструментов высокая. Его стороны и низ прикреплены к сторонам и основанию суперпредставления как обычно.

-(CGSize)intrinsicContentSize {
    return CGSizeMake(UIViewNoIntrinsicMetric, 85);
}
14 голосов
/ 07 ноября 2015

Для Xcode 7.1 iOS 9 в автоматическом макете размер заблокирован до 44px. Пункт меню Редактора Xcode> Pin> Высота не там, вместо этого выполните следующее действие:

В InterfaceBuilder щелкните элемент панели инструментов, чтобы выбрать его. Control + Перетащите вниз в любом месте на панели инструментов и отпустите, появится всплывающее меню, показывающее параметр «Высота» в верхней части, выберите его.

Теперь у вас есть ограничение высоты для работы и корректировки по мере необходимости.

6 голосов
/ 25 апреля 2013

Вы также можете просто отредактировать файл xib:

откройте его как исходный код и найдите запись, которая определяет фрейм для UIToolbar, что-то вроде

<string key="NSFrame">{{0,420}, {320,44}}</string>

и просто измените значение 44 на любой нужный вам размер.

Таким образом, панель инструментов будет выше, и в InterfaceBuilder вы увидите, что новый размер выделен серым цветом, и вы не сможете его изменить, но вам не нужны никакие розетки или код.

2 голосов
/ 23 сентября 2014

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

-(void)setHeightConstraintTo:(CGFloat)height forView:(UIView *)view{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d",          NSLayoutAttributeHeight];
    NSArray *filteredArray = [view.constraints filteredArrayUsingPredicate:predicate];
    if(filteredArray.count > 0){
        NSLayoutConstraint *constraint = filteredArray.firstObject;
        constraint.constant = height;
    }
 }
1 голос
/ 18 октября 2013

Я не уверен, как это будет с Apple - и, конечно, это зависит от того, как вы хотите использовать панель инструментов, - но вы можете добавить UIView по умолчанию и изменить его класс в инспекторе свойств на UIToolbar. Это дает вам прозрачность и настраиваемость (в данном случае высоту) бесплатно, за счет расположения элементов панели кнопок.

0 голосов
/ 01 января 2018

В конструкторе интерфейсов также есть возможность использовать «Определяемые пользователем атрибуты времени выполнения».

Просто добавьте запись с keypath установленным в «frame» типа «Rect» и установите желаемое значение.

enter image description here

0 голосов
/ 29 августа 2017

Быстрое решение:

myToolbar.frame = CGRect(x: myToolbar.frame.origin.x, y: myToolbar.frame.origin.y, width: myToolbar.frame.size.width, height: 20)

CGRectMake устарел. Это можно заменить на CGRect. Это установит высоту панели инструментов равной 20. То же самое работает и для сегментированного управления.

...