UIToolbar - 边距?有谁知道UIToolbar的左右边距?

时间:2011-04-18 19:48:27

标签: iphone cocoa-touch ios4 uitoolbar

我正在创建一个UIToolbar,只放置一个UILabel。标签内容是动态的,可以改变,我想把它放在UIToolbar上。

有没有人知道UIToolbar左右两侧的确切边距大小?

我正在创建 [[UIBarButtonItem alloc] initWithCustomView:myLabelContainer] ,我正在尝试确保myLabelContainer占用整个工具栏空间,减去强制边距。

现在我猜测每边的边距大约是12像素,所以框架宽度为296的UIView应该填满整个UIToolbar?

这些信息可以在任何地方找到吗?

2 个答案:

答案 0 :(得分:9)

我认为此信息不可用。 但是进行一些测试应该很容易。

如果您需要的只是整个工具栏上的UILabel,我建议您将其添加到UIToolbar,这是一个UIView子类。您不需要案例中的所有UIBarButtonItem功能....只是我认为的背景。

然后设置UILabel.frame(带有你想要的边距)+ addSubview: +一个UITextAlignmentCenter应该可以胜任!如果您有管理设备方向,也可以使用UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight的autoresizingMask ...

编辑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是在按钮之前添加的默认空间。我刚刚发现了一个有趣的,间隔符正在使用 负值! 。 I.E.如果你想在两个按钮之间留出2px的空间,只需添加一个-10px UIBarButtonSystemItemFixedSpace ... Handy!

答案 1 :(得分:1)

似乎没有存储此边距的任何地方,但这里有一种在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,iPhone上的横向值为20,iPad上为20。