ios - 删除 UISearchBar 文本字段周围的填充
问题描述
我正在尝试左对齐UISearchBar
.
我说的是下面紫色的区域。
我已经能够通过设置背景来隐藏它,.clear
但是我现在希望文本字段与上面文本的前沿对齐。我不确定我应该调整什么属性以正确左对齐整个搜索字段。
解决方案
不幸的是,没有办法可靠地移除这个填充。目前(从 iOS 13 开始)水平填充为 8 pts,垂直填充为 10 pts。
您可以简单地将前导/尾随约束设置为“Discogs|Search”视图 + 8 pts 以使其显示相同的大小。
我需要做一些类似于UISearchBar
SwiftUI 中的 wrap 的事情,而是使用padding
了类似这样的修饰符UISearchBar
UIViewRepresentable
:
struct SearchBar: View {
private var title: String = "Search"
@Binding private var text: String
private var onEditingChanged: (Bool) -> Void
init(
_ title: String,
text: Binding<String>,
onEditingChanged: @escaping (Bool) -> Void = { _ in }
) {
self.title = title
self._text = text
self.onEditingChanged = onEditingChanged
}
var body: some View {
__SearchBar(title, text: $text, onEditingChanged: onEditingChanged)
.padding(.horizontal, -8)
.padding(.vertical, -10)
}
}
private struct __SearchBar: UIViewRepresentable {
private var placeHolder: String = "Search"
@Binding private var text: String
private var onEditingChanged: (Bool) -> Void
init(
_ title: String,
text: Binding<String>,
onEditingChanged: @escaping (Bool) -> Void
) {
self.placeHolder = title
self._text = text
self.onEditingChanged = onEditingChanged
}
final class Coordinator: NSObject, UISearchBarDelegate {
private let parent: __SearchBar
@Binding var text: String
init(parent: __SearchBar, text: Binding<String>) {
self.parent = parent
_text = text
}
func searchBar(
_ searchBar: UISearchBar,
textDidChange searchText: String
) {
text = searchText
}
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
parent.onEditingChanged(true)
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
parent.onEditingChanged(false)
}
}
func makeCoordinator() -> Coordinator {
Coordinator(parent: self, text: $text)
}
func makeUIView(context: Context) -> UISearchBar {
let searchBar = UISearchBar(frame: .zero)
searchBar.placeholder = placeHolder
searchBar.searchBarStyle = .minimal
searchBar.delegate = context.coordinator
return searchBar
}
func updateUIView(_ uiView: UISearchBar, context: Context) {
uiView.text = text
}
}
推荐阅读
- c# - UWP 应用程序 - 将 SQL 表中的数据显示到数据网格或列表框
- python - 将 Pytorch 中实现的自定义优化器转换为 TensorFlow
- sql-server - 如何将 DACPAC 部署到事务复制数据库
- sockets - How send/receive a List of elements over socket?
- javascript - 滚动 div 在内容加载时卡在底部
- python - Django 从可以选择多个选项的下拉列表中获取值
- c++ - 如何在资源管理器中的文件拖动操作期间获取鼠标光标坐标
- flowtype - 像“数字”这样的流包装类型的目的是什么?
- typescript - 映射类型可以使属性成为可选的,但前提是满足条件?
- android - Embarcadero C++Builder Android 应用程序 SEGV_MAPERR 在特定手机上崩溃 (Galaxy A51)