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

Ios UISearchBar开始编辑时会拉伸文本,ios,swift,uikit,uisearchbar,Ios,Swift,Uikit,Uisearchbar,我在UINavigationBar的标题视图中添加了一个UISearchBar实例。当已经设置了文本并且搜索栏开始编辑时,它会调整其内容的大小,以便为“取消”按钮留出空间,不过,生成的动画会拉伸文本,如下面的gif所示 是否可以采取任何措施来避免这种缺陷效应?我试图删除文本,然后在几分钟后将其添加回,虽然它可以工作,但这不是一个优雅的解决方案 更新 根据@Paruru的回答,我试图预测Cancel按钮的动画效果,它看起来不错。我所做的是强制显示搜索栏上的取消按钮应开始编辑: extensio

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

是否可以采取任何措施来避免这种缺陷效应?我试图删除文本,然后在几分钟后将其添加回,虽然它可以工作,但这不是一个优雅的解决方案

更新


根据@Paruru的回答,我试图预测
Cancel
按钮的动画效果,它看起来不错。我所做的是强制显示
搜索栏上的
取消
按钮应开始编辑:

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
    }

}
最终的结果是我想要实现的,没有文本被拉伸的动画。我认为这是一个解决办法,所以我会等待其他答案,因为这个代码可能不是未来的证明。
- (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;
}

更新后的解决方案运行良好,只是当没有文本时出现“取消”按钮时,它会阻止“搜索”占位符向左移动。选中
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

的一个问题,它会使按钮跳入和跳出搜索栏,而这不是我想要实现的。我在上面提到我找到了一份工作。我正在寻找的是一种解决方案,而不是另一种绷带解决方案。您更新的解决方案效果很好,您应该将其作为答案发布,以便我可以对其进行投票!嗨,Alex,我不想让它成为正确的答案,因为这是一个黑客攻击,可能会对新版本的iOS造成损害,这可能会解决动画问题。谢谢Alex!我将更新问题,添加您的建议。而不是
searchBar.text?.isEmpty==false
使用
!searchBar.text?.isEmpty