UIToolBar 与 UIBarButtonItems 等间距,无论标题长度如何

Posted

技术标签:

【中文标题】UIToolBar 与 UIBarButtonItems 等间距,无论标题长度如何【英文标题】:UIToolBar with UIBarButtonItems equally spaced regardless of title length 【发布时间】:2014-01-24 20:10:47 【问题描述】:

所以我的任务是向 UIToolBar 添加按钮并将 textView 的 inputAccessoryView 设置为此 UIToolBar。

所以我做了基础:

UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"title1" style:UIBarButtonItemStylePlain target:self action:selector];
UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"longer title2" style:UIBarButtonItemStylePlain target:self action:selector];
UIBarButtonItem *item3 = [[UIBarButtonItem alloc] initWithTitle:@"title 3 is a lot longer" style:UIBarButtonItemStylePlain target:self action:selector];
UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *divider1 = [self barButtonDivider];
UIBarButtonItem *divider2 = [self barButtonDivider];

UIToolBar *toolBar = [UIToolBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
[toolBar setItems:@[spacer,item1,spacer,divider1,spacer,item2,spacer,divider2,spacer,item3,spacer];
self.textView.inputAccessoryView = toolbar;

所以有更多的方法来解决这个问题。

1) 我可以继承 UIToolBar

2) 我可以子类化 UIView 并将视图设置为我需要的大小(superView 的宽度和高度 44),但我需要在 Auto-Layout 中完成所有这些操作,我尝试过但无法做到做对了。

有没有一种方法可以将上述方法与标准工具栏一起使用并获得正确的间距,无论我使用多少按钮,所有按钮的宽度都相等?

ETA:,尝试了以下解决方案,但没有奏效:

- (UIBarButtonItem *)spacer 

    return [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];


[toolBar setItems:@[[self spacer], item1, [self spacer], divider1, [self spacer], item2, [self spacer], divider2, [self spacer], item3, [self spacer]];

用这个解决方案解决了,但我不喜欢它:

 button.width = 150;

按钮在纵向或横向上将保持相同,所以我想这是一个可行的解决方案,您觉得如何?

【问题讨论】:

【参考方案1】:

我不确定,但问题可能在于重用垫片。每次需要灵活空间时尝试创建新的UIBarButtonSystemItemFlexibleSpace

【讨论】:

试过了,没用,创建了一个名为 -(UIBarButtonItem*)spacer 的方法,该方法返回了一个新的 UIBarButton,systemItem 类型为灵活空间,然后每个索引重复相同的灵活空间,我将其替换为 [ self spacer],这样做后没有运气。

以上是关于UIToolBar 与 UIBarButtonItems 等间距,无论标题长度如何的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Swift 中使用#selector 调用带参数的函数

CNContactPickerViewController 与 UIToolbar

UIToolBar 与 UIBarButtonItems 等间距,无论标题长度如何

如何将 2 个按钮与 UIToolbar 的左右边框对齐

UIToolBar 动画与视图转换不正确

添加与 inputAccessaryView 相同的工具栏时不显示 UIToolBar