我有一点问题,但还没有找到任何解决方案。
我的应用中有UISearchBar
ScopeBar
。 ScopeBar
包括4个范围按钮。目前所有这些都有相同的宽度。
我的一个按钮的文本比其他按钮长。在我的情况下,文本被截断。它看起来像:
[ short | short |longte...| short ]
显示整个文本没有问题,如果我可以最小化短按钮的宽度并将一些像素添加到第三个按钮。
第一个问题: 是否可以设置不同的按钮尺寸?
第二个: 如果是的话,我怎么能这样做?
答案 0 :(得分:2)
我认为不可能使用公共API直接从UISegmentedControl
访问UISearchBar
(范围栏)的属性。
解决此问题的一种方法是访问UISegmentedControl
是使用UISearchBar
:_scopeBar
的私有属性。
这样做的一个简洁方法是在UISearchBar
上声明一个类别以公开此属性:
@interface UISearchBar (ExposeScopeBar)
@property (readonly) UISegmentedControl *_scopeBar;
@end
然后,您所要做的就是访问范围栏(这是一个经典的UISegmentedControl
),并将其apportionsSegmentWidthsByContent
属性设置为true:
self.searchBar._scopeBar.apportionsSegmentWidthsByContent = YES;
如果您需要对细分受众群规模进行更细粒度的控制,您还可以使用UISegmentedControl
UISegmentedControl
方法。
请注意,虽然这会使用私有的UIKit API,而会有一个更改,您的应用将从App Store中被拒绝。
另一种选择是递归搜索UISearchBar
视图层次结构中的- (UISegmentedControl *)scopeBarForSearchBar:(UISearchBar *)searchBar
{
return [self scopeBarInViewHierarchy:searchBar];
}
- (UISegmentedControl *)scopeBarInViewHierarchy:(UIView *)view
{
if ([view isKindOfClass:[UISegmentedControl class]])
{
return view;
}
for (UIView *child in [view subviews])
{
UIView *result = [self scopeBarInViewHierarchy:child];
if (result)
{
return result;
}
}
return nil;
}
,而不是使用私有属性。
以下是执行此操作的伪代码段:
{{1}}
再次:这是伪代码。未经测试。
此解决方案不使用私有API,因此它应该毫无问题地通过App Store验证。