我正在创建一个UIToolbar,只放置一个UILabel。标签内容是动态的,可以改变,我想把它放在UIToolbar上。
有没有人知道UIToolbar左右两侧的确切边距大小?
我正在创建 [[UIBarButtonItem alloc] initWithCustomView:myLabelContainer] ,我正在尝试确保myLabelContainer占用整个工具栏空间,减去强制边距。
现在我猜测每边的边距大约是12像素,所以框架宽度为296的UIView应该填满整个UIToolbar?
这些信息可以在任何地方找到吗?
答案 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];
结果如下:
编辑2 :
现在我已经开始使用Xcode并编写了一些代码,这很容易找出你的主要问题。改变前面的代码:
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease];
... same
[self.toolbar setItems:
[NSArray arrayWithObject:
[[[UIBarButtonItem alloc] initWithCustomView:label] autorelease]]];
带来:
正如您猜测的那样,左边距为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]];
结果:
编辑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。