2017-06-18 27 views
9

Với iOS 11, thanh tìm kiếm được đặt mặc định thành văn bản căn trái. Trong khi điều này có vẻ tốt với phần còn lại của những thay đổi bản địa cho iOS, nó không thực sự phù hợp với thiết kế của tôi, và tôi muốn nó là trung tâm, như trước đây.Cách căn giữa văn bản giữ chỗ trong UISearchBar iOS 11

Tôi không thể tìm thấy bất kỳ thuộc tính căn chỉnh nào như vậy trên UISearchBar. Tôi có thiếu một cái gì đó, hoặc là nó chỉ đơn giản là không thể? Tôi có phải tạo thanh tìm kiếm tùy chỉnh của riêng mình, ví dụ: bắt nguồn từ một số UITextField để đạt được điều này không?

+0

Vâng tôi muốn đặt nó ở trung tâm quá. Làm thế nào cứng là nó cho Apple để cho chúng tôi thiết lập searchBar.placeHolder.textAlignment = NSTextAlignmentCenter ?? – coolcool1994

Trả lời

3

Đây là một chút giải pháp.

Trước hết bạn cần phải nhận được trường văn bản của thanh tìm kiếm và tập trung sự liên kết văn bản:

let textFieldOfSearchBar = searchController.searchBar.value(forKey: "searchField") as? UITextField textFieldOfSearchBar?.textAlignment = .center

Sau đó, bạn cần thay đổi sự liên kết của placeholder. Đối với một số lý do nó không thay đổi với sự liên kết của trường văn bản. Bạn nên làm điều đó bằng cách thêm một lớp đệm để quan điểm trái của textfield chỉ khi bộ điều khiển tìm kiếm đang hoạt động, vì vậy sử dụng nó của phương pháp đại biểu:

func presentSearchController(_ searchController: UISearchController) { 
    //Is active 
    let width: CGFloat = 100.0 //Calcualte a suitable width based on search bar width, screen size, etc.. 

    let textfieldOfSearchBar = searchController.searchBar.value(forKey: "searchField") as? UITextField 

    let paddingView = UIView(x: 0, y: 0, w: width, h: searchController.searchBar.frame.size.height) 
    textfieldOfSearchBar?.leftView = paddingView 
    textfieldOfSearchBar?.leftViewMode = .unlessEditing 
} 

func willDismissSearchController(_ searchController: UISearchController) { 
    let textfieldOfSearchBar = searchController.searchBar.value(forKey: "searchField") as? UITextField 
    textfieldOfSearchBar?.leftView = nil 
} 

Chúc may mắn

+1

let paddingView = UIView (khung: CGRect (x: 0, y: 0, chiều rộng: chiều rộng, chiều cao: self.frame.size.height)) –

0

hãy placeHolderOffSet = UIOffset (ngang: 100 , dọc: 0) setPositionAdjustment (placeHolderOffSet, cho: .search)

nếu bạn muốn có một vị trí khác nhau trong khi quầy bar được kích hoạt, bạn sẽ phải thiết lập lại này trong phương pháp đại biểu tương ứng

3

Tôi đã có chính xác cùng một vấn đề - Tôi đang đấu tranh để hiểu tại sao sự liên kết mặc định sẽ được thay đổi mà không cho phép chúng tôi dễ dàng thiết lập này trở lại trung tâm.

Các công trình dưới đây cho tôi (Swift):

let placeholderWidth = 200 // Replace with whatever value works for your placeholder text 
var offset = UIOffset() 

override func viewDidLoad() { 
    offset = UIOffset(horizontal: (searchBar.frame.width - placeholderWidth)/2, vertical: 0) 
    searchBar.setPositionAdjustment(offset, for: .search) 
} 

func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { 
    let noOffset = UIOffset(horizontal: 0, vertical: 0) 
    searchBar.setPositionAdjustment(noOffset, for: .search) 

    return true 
} 


func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool { 
    searchBar.setPositionAdjustment(offset, for: .search) 

    return true 
} 
Các vấn đề liên quan