【问题标题】:UIButton setTitle:longerTitle forState: contracting title stringUIButton setTitle:longerTitle forState: 合同标题字符串
【发布时间】:2015-11-11 16:57:35
【问题描述】:

我正在尝试使用设置 UIButton 的标题 [button setTitle:changedTitle forState:UIControlStateNormal] 标题正在正确更改,但在内部这似乎由 UIButton 动画,当从长标题更改为短标题时,UIButton 标签上似乎有一个布局传递,intrinsicContentSize 基于最终字符串长度,但在 UIButton 的标签中的文本已更改之前。结果是在设置短标题之前,我可以在UIButton 中看到长标题的瞬间收缩。 例如。

开始:

LooooongTiiiiiiitle

在淡入淡出的动画中变成了几分之一秒:

Lon...tle

降落前:

Short

我没有在视图上做任何其他动画,并且能够在一个新项目中重新创建这种效果,除了一个带有一个 UIButton 的视图。

这是 UIKit 错误还是我做错了什么?

【问题讨论】:

  • 你能发布测试项目吗?
  • 感谢您查看@matt 我已将其放在 github 上github.com/dallasjohnson/UIButtonTitleShrinking
  • 也许我只是不敏感,但我没有看到问题所在。正如人们所期望的那样,我看到点击 - 淡出 - 以新标题重新出现。
  • 您可以在模拟器中切换慢速动画时看到它。
  • 好吧,没错!但是,在切换慢速动画的模拟器中,生活并非如此。

标签: ios uibutton autolayout uikit


【解决方案1】:

这个现象其实更容易看看你是否加了一个延迟,这样你在点击按钮的过程中就不会改变按钮标签:

@interface ViewController ()
@property (nonatomic,assign) BOOL longString;
@end

@implementation ViewController

- (IBAction)changeLabel:(UIButton *)sender {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSString *text = self.longString ? @"aaaaaaaaaaaaaaaa": @"bbbbb";
        [sender setTitle:text forState:UIControlStateNormal];
        self.longString = !self.longString;
    });
}

我会说继续提交错误报告。

【讨论】:

  • 谢谢。我知道这是一个非常微妙的错误,不会毁了任何人的一天,但我想我会把它放在那里,以防我做一些愚蠢的事情。我将提交错误报告,但不会屏住呼吸等待修复。 Apple 有很多更重要的错误需要先修复。
猜你喜欢
  • 1970-01-01
  • 2011-12-20
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多