我有以下代码来改变我的应用程序中UISearchBar的外观,如下图所示:
for(int i = 0; i < [[searchBar subviews] count]; i++){
UIView *subView = [[searchBar subviews] objectAtIndex:i];
if([[NSString stringWithFormat:@"%@", [subView class]] isEqualToString:@"UINavigationButton"]){
UIButton *cancelButton = (UIButton *)subView;
CGRect buttonFrame = cancelButton.frame;
buttonFrame.size.height = 52;
[cancelButton setFrame:buttonFrame];
[cancelButton setTitle:@"Cancel" forState:UIControlStateNormal];
[cancelButton setBackgroundImage:[UIImage imageNamed:@"cancel.png"] forState:UIControlStateNormal];
[cancelButton setBackgroundImage:[UIImage imageNamed:@"cancel_pressed.png"] forState:UIControlStateHighlighted];
}
}
你可以看到,我试图更改UISearchBar中包含的按钮的高度,但没有成功。我可以获得对该按钮的引用,因为我可以更改文本,并更改背景图像,但框架的高度不变。我希望按钮的高度与搜索框相同,为52px。
编辑:我已经找到了一个非常hacky的解决方案,但它并不是很优雅,就是添加一个UIButton作为取消按钮的子视图。它能完成任务,但我说它不够好看。
-addSubView
中更改框架没有效果。我猜测是因为Apple的-layoutSubViews
中有一些硬编码的按钮大小。你可以覆盖-layoutSubViews
,但会导致动画效果不太好。 - Zayin Krige