UISearchBar在开始编辑时会拉伸文本

时间:2015-08-06 03:26:59

标签: ios swift uikit uisearchbar

我在UINavigationBar的标题视图中添加了一个UISearchBar实例。当已经设置了文本并且搜索栏开始编辑时,它会调整其内容的大小以允许“取消”按钮的空间,但是,生成的动画会拉伸文本,如下面的gif所示

enter image description here

是否可以采取任何措施来避免此缺陷效应?我试图删除文本,然后稍后再添加它,虽然它有效,但它不是一个优雅的解决方案。

更新

根据@ Paruru的回答,我试图预测Cancel按钮的动画,但看起来并不坏。我所做的是强制在Cancel

上展示searchBarShouldBeginEditing:按钮
extension SearchViewController: UISearchBarDelegate {

    func searchBarShouldBeginEditing(searchBar: UISearchBar) -> Bool {
        if searchBar.text?.isEmpty == false {
            // This avoids the text being stretched by the UISearchBar.
            searchBar.setShowsCancelButton(true, animated: true)
        }
        return true
    }

}

最终结果是我想要实现的,没有文本被拉伸的动画。我认为这是一种解决方法,所以我会等待其他答案,因为这些代码可能不会成为未来的证据。

2 个答案:

答案 0 :(得分:2)

您的更新解决方案效果很好,但在没有文本时出现“取消”按钮时,“搜索”占位符会停止向左设置动画。检查searchBar.text恢复动画:

func searchBarShouldBeginEditing(searchBar: UISearchBar) -> Bool {
    // This avoids the text being stretched by the UISearchBar.
    if searchBar.text?.isEmpty == false {
        searchBar.setShowsCancelButton(true, animated: true)
    }
    return true
}

我怀疑这可能只是Minimal UISearchBarStyle的问题。

答案 1 :(得分:1)

- (void)setShowsCancelButton:(BOOL)showsCancelButton animated:(BOOL)animated NS_AVAILABLE_IOS(3_0);

只需在没有动画的情况下调用该方法。

if (!self.isShowCancelBtn) {
    [self.searchBar setShowsCancelButton:YES animated:NO];
    self.isShowCancelBtn = YES;
}else{
    [self.searchBar setShowsCancelButton:NO animated:NO];
    self.isShowCancelBtn = NO;
}