我正在开发一个应用程序,其中我将UISearchBar
放在包含UIViewController
的UITableViewController
的顶部。 UISearchBar
过滤UITableView
的内容。
到目前为止,我没有做任何事情(除了自定义颜色以匹配我的应用程序的主题,这已经够难了!),但是在iPhone 4/5以外的任何设备上,UISearchBar
都太小了。
因此,我正在尝试更新字体的大小和内部UITextField
的高度。
事实证明,所有这些都非常困难,需要大量定制。因此,如果您知道可以简化此操作的库,请在评论中告诉我。
这是我现在正在使用的代码:
// In a category for UISearchBar
- (void)setup {
self.tintColor = [UIColor offWhite];
for (UIView *view in self.subviews) {
[self configureView:view];
}
}
- (void)configureView:(UIView *)view {
if ([view isKindOfClass:[UITextField class]]) {
CGFloat fontSize, frameHeight;
if (IS_IPHONE_4) {
fontSize = 14.0f;
frameHeight = 24.0f;
} else if (IS_IPHONE_5) {
fontSize = 14.0f;
frameHeight = 24.0f;
} else if (IS_IPHONE_6) {
fontSize = 17.0f;
frameHeight = 28.0f;
} else if (IS_IPHONE_6PLUS) {
fontSize = 20.0f;
frameHeight = 32.0f;
} else {
// iPad
fontSize = 24.0f;
frameHeight = 36.0f;
}
UITextField *textfield = (UITextField *)view;
textfield.font = [UIFont buttonFontOfSize:fontSize];
textfield.textColor = [UIColor offWhite];
textfield.tintColor = [UIColor offWhite];
CGRect frame = textfield.frame;
frame.origin.y = (self.frame.size.height - frameHeight) / 2.0f;
frame.size.height = frameHeight;
textfield.frame = frame;
}
if (view.subviews.count > 0) {
for (UIView *subview in view.subviews) {
[self configureView:subview];
}
}
}
注意:我以这种方式构造代码,以防Apple更改
UISearchBar
的内部结构。我不想对索引值进行硬编码。因此,此代码“有效”,因为最终结果是我想要的,即,具有指定大小的文本的更高的
UISearchBar
和指定的内部UITextField
也更高。我不了解是到达那里的过程。[self.searchBar setup]
,则无法正常工作(内部UITextField
的高度错误)。这对我来说很有意义,因为在实际布局视图之前,框架是(0,0,0,0)
。 [self.searchBar setup]
方法中调用-viewWillAppear:
,则无法正常工作(内部UITextField
的高度错误)。因为调试显示帧仍然是(0,0,0,0)
,所以对我来说不是,但我认为在布局和设置所有内容后都会调用-viewWillAppear:
。 [self.searchBar setup]
方法中调用-viewDidLayoutSubviews
,则它“正常”运行,但是内部UITextField
从“正常”高度开始,然后在实际显示视图后的某个时间“跳转”到正确的高度。 我使用纯AutoLayout在代码中设置了整个
UIViewController
。我简直无法按照我希望的方式来设置UISearchBar
,然后再将视图完成加载并显示在屏幕上。过去我看过一些时髦的东西,但是我一直能够强迫视图按需渲染。 UISearchBar
在幕后有什么特别的地方吗?有人知道如何完成这项工作吗? 最佳答案
您在同一视图上混合了自动布局和手动布局(someView.frame = …
)。你不能那样做。
相反,要更改高度,请将视图的高度约束上的constant
设置为frameHeight
。让自动布局引擎为您设置框架。
关于ios - UISearchBar-内部UITextField高度问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28311219/