【问题标题】:Remove padding around UISearchBar textfield删除 UISearchBar 文本字段周围的填充
【发布时间】:2019-04-11 15:46:32
【问题描述】:

我正在尝试将 UISearchBar 中的文本字段左对齐。

我说的是下面紫色区域。

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

【问题讨论】:

标签: ios swift autolayout uitextfield uisearchbar


【解决方案1】:

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

您可以简单地将前导/尾随约束设置为“Discogs|Search”视图 + 8 pts 以使其显示相同大小。

我需要做一些类似于在 SwiftUI 中包装 UISearchBar 的操作,但在 UISearchBar UIViewRepresentable 上使用了 padding 修饰符,如下所示:

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
    }
}

【讨论】:

    猜你喜欢
    • 2012-04-09
    • 2013-01-07
    • 2014-01-30
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 2017-02-22
    • 2013-07-31
    • 2017-11-23
    相关资源
    最近更新 更多