Ios UISearchBar-内部UITextField高度问题
我正在开发一个应用程序,其中我在包含Ios UISearchBar-内部UITextField高度问题,ios,objective-c,uisearchbar,Ios,Objective C,Uisearchbar,我正在开发一个应用程序,其中我在包含UITableViewController的UIViewController顶部放置了一个UISearchBar。UISearchBar过滤UITableView的内容 到目前为止,我没有做任何事情(除了定制颜色以匹配我的应用程序的主题,这已经够难了!),但是在除iPhone4/5之外的任何东西上,UISearchBar明显太小了 因此,我正在尝试更新字体大小和内部UITextField的高度 事实证明,所有这些都很难实现,需要相当多的定制。因此,如果你知道一
UITableViewController
的UIViewController
顶部放置了一个UISearchBar
。UISearchBar
过滤UITableView
的内容
到目前为止,我没有做任何事情(除了定制颜色以匹配我的应用程序的主题,这已经够难了!),但是在除iPhone4/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];
}
}
}
注意:我以这种方式构建代码,以防苹果更改UISearchBar
的内部结构。我不想硬编码索引值
因此,这段代码“有效”,因为最终的结果就是我想要的,即一个更高的UISearchBar
,文本大小按规定,内部UITextField
也按规定更高。我不明白的是到达那里的过程
[self.searchBar setup]
,它将不起作用(内部UITextField
的高度错误)。这对我来说很有意义,因为在视图实际布局之前,框架是(0,0,0,0)
-视图中调用[self.searchBar setup]
,将显示:
方法,它不起作用(内部UITextField
的高度错误)。这个对我来说没有意义,因为调试显示帧仍然是(0,0,0,0)
,但我认为-视图将出现:
是在布局和设置所有内容时调用的-viewdilayoutsubviews
方法中调用[self.searchBar setup]
,它会“工作”,但内部UITextField
会开始“正常”高度,然后在视图实际出现一段时间后“跳”到正确的高度我使用纯自动布局在代码中设置整个
UIViewController
。在视图完成加载并显示在屏幕上之前,我无法按照我想要的方式设置UISearchBar
。我以前见过一些时髦的东西,但我总是能够强制视图按需要渲染。UISearchBar
的幕后是否有什么特别之处?有人知道如何做到这一点吗?您在同一视图上混合了自动布局和手动布局(someView.frame=…
)。你不能那样做
相反,要更改高度,请将视图高度约束上的
常量设置为frameHeight
。让自动布局引擎为您设置框架。我认为情况并非如此。我知道你在说什么,但我只是用AutoLayout做“外部”视图。而且,不管怎样,它“起作用”,就像我说的,它只是在视图显示后到达那里,但是ui搜索栏的总体高度始终是正确的。