删除 UISearchBar 文本字段周围的填充

Har*_*lue 5 uitextfield uisearchbar ios autolayout swift

我正在尝试左对齐 .csv 文件中的文本字段UISearchBar

我说的是下面紫色的区域。

在此处输入图片说明

我已经能够通过设置背景来隐藏它,.clear但是我现在希望文本字段与上面文本的前缘对齐。我不确定我应该调整什么属性以正确左对齐整个搜索字段。

在此处输入图片说明

jja*_*tie 5

不幸的是,没有办法可靠地删除这个填充。目前(从 iOS 13 开始)水平内边距为 8 点,垂直内边距为 10 点。

您只需将前导/尾随约束设置为“Discogs|Search”视图 + 8 点,即可使其显示相同的大小。

我需要做一些类似于UISearchBar在 SwiftUI 中换行的事情,但是使用了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
    }
}
Run Code Online (Sandbox Code Playgroud)