UIToolbar - поля? Кто-нибудь знает левый и правый поля для UIToolbar? - PullRequest
4 голосов
/ 18 апреля 2011

Я создаю UIToolbar, на котором размещена только UILabel. содержимое метки является динамическим и может изменяться, и я хотел бы расположить его по центру на панели UIToolbar.

Кто-нибудь знает точный размер поля для левой и правой сторон UIToolbar?

Я создаю [[UIBarButtonItem alloc] initWithCustomView: myLabelContainer] и пытаюсь убедиться, что myLabelContainer занимает все пространство панели инструментов, за вычетом вынужденных полей.

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

Доступна ли эта информация где-либо?

Ответы [ 2 ]

9 голосов
/ 18 апреля 2011

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

Если вам нужна всего лишь UILabel на всей панели инструментов, я бы посоветовал просто добавить ее в UIToolbar, то есть UIViewподкласс.Вам не нужны все функции UIBarButtonItem в вашем случае ... только фон, который я предполагаю.

Затем установите UILabel.frame (с нужными полями) + addSubview: + a UITextAlignmentCenter должен делать работу!Плюс, возможно, также маска автоматического изменения размера с UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight, если вы управляете ориентацией устройства ...

РЕДАКТИРОВАТЬ 1 :

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

UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(10, 0, 300, 44)] autorelease];
label.text = @"Hello world";
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.shadowColor = [UIColor blackColor];
label.backgroundColor = RGBACOLOR(255, 0, 0, .3f);
[self.toolbar addSubview:label];

Вот результат:

enter image description here

РЕДАКТИРОВАТЬ 2 :

Теперь, когдаЯ запустил Xcode и написал некоторый код, который легко понять с помощью вашего основного вопроса.Немного изменив предыдущий код:

UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease];
... same
[self.toolbar setItems:
 [NSArray arrayWithObject:
  [[[UIBarButtonItem alloc] initWithCustomView:label] autorelease]]];

приводит к этому:

toolbar2

Так что, как вы уже догадались, есть левое поле 12px, но пользовательские представленияне похоже, чтобы его размер соответствовал размеру, поэтому в этом случае нет правого поля ... если только вы не измените размер своего представления соответствующим образом.

РЕДАКТИРОВАТЬ 3 :

Если только вашей UILabel не нужен фон, вот что я, вероятно, сделал бы (для этого, в конце концов, UIBarButtonSystemItemFlexibleSpace ...) :

UILabel *label = [[[UILabel alloc] init] autorelease];
label.text = @"Hello world";
... same
[label sizeToFit];
[self.toolbar setItems:
 [NSArray arrayWithObjects:
  [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                 target:nil action:nil] autorelease],
  [[[UIBarButtonItem alloc] initWithCustomView:label] autorelease],
  [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                 target:nil action:nil] autorelease],
  nil]];

Результат:

enter image description here

РЕДАКТИРОВАТЬ 4 :

Как сторона, после работы над UIToolbar, 12px является добавленным пробелом по умолчанию до кнопка.И я только что обнаружил забавный, проставки работают с отрицательными значениями! .То есть, если вам нужно 2 пикселя между двумя кнопками, просто добавьте -10px UIBarButtonSystemItemFixedSpace ... Handy!

1 голос
/ 22 апреля 2016

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

UIButton button = new UIButton();
button.Tag = 999;
ToolbarItems = new[] { FilterButton };

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

if (NavigationController != null)
{
    UIButton firstButton = NavigationController.Toolbar.Subviews
        .FirstOrDefault(x => x.GetType() == typeof(UIButton) && x.Tag == 999);
    if (firstButton != null)
    {
        var orientation = UIApplication.SharedApplication.StatusBarOrientation;
        var padding = firstButton.Frame.X;
    }
}

Для записи, для iOS9, значения 16 для портретного и 20 для альбомного на iPhone и 20 для обоих на iPad.

...