gpt4 book ai didi

ios - UISearchBar - 内部 UITextField 高度问题

转载 作者:行者123 更新时间:2023-11-29 12:29:01 25 4
gpt4 key购买 nike

我正在开发一个应用程序,我将 UISearchBar 放在包含 UITableViewControllerUIViewController 的顶部。 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];
}
}
}

Note: I structured my code this way in case Apple changes the internal structure of the UISearchBar. I didn't want to hard-code index values.

所以,这段代码“有效”,因为最终结果是我想要的,即一个更高的 UISearchBar,文本大小按指定大小,内部 UITextField 也是更高,按照规定。我理解的是到达那里的过程。

  1. 如果我在一般的 AutoLayout 过程中调用 [self.searchBar setup],它将不起作用(内部 UITextField 的高度错误)。这对我来说很有意义,因为框架是 (0,0,0,0) 直到 View 被实际布局。
  2. 如果我在我的 -viewWillAppear: 方法中调用 [self.searchBar setup],它不起作用(内部 UITextField 是错误的高度)。这没有对我来说有意义,因为调试显示帧仍然是(0,0,0,0),但我认为-viewWillAppear: 当一切都布置好并设置好时调用。
  3. 如果我在我的 -viewDidLayoutSubviews 方法中调用 [self.searchBar setup],它“有效”,但内部 UITextField 开始“正常”高度,然后在 View 实际出现一段时间后“跳”到正确的高度。

我使用纯 AutoLayout 在代码中设置了整个 UIViewController。我根本无法按照我想要的方式设置 UISearchBar BEFORE View 加载完成并显示在屏幕上。我过去见过一些时髦的东西,但我总是能够强制 View 按需要呈现。 UISearchBar 在幕后有什么特别之处吗?有人知道如何完成这项工作吗?

最佳答案

您在同一 View 中混合了自动布局和手动布局 (someView.frame = …)。你不能那样做。

相反,要更改高度,请将 View 高度约束上的常量 设置为frameHeight。让自动布局引擎为您设置框架。

关于ios - UISearchBar - 内部 UITextField 高度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28311219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com