[objective-c] 타이틀 변경시 원하지 않는 UIButton 애니메이션을 중지하는 방법은 무엇입니까?

iOS 7에서 UIButton 타이틀이 잘못된 시간에 늦게 애니메이션으로 움직이고 있습니다. 이 문제는 iOS 6에는 나타나지 않습니다.

[self setTitle:text forState:UIControlStateNormal];

나는 이것이 빈 프레임없이 즉시 발생하는 것을 선호합니다. 이 깜박임은 특히주의를 산만하게하며 다른 애니메이션에서주의를 끕니다.



답변

이것은 사용자 정의 버튼에서 작동합니다.

[UIView setAnimationsEnabled:NO];
[_button setTitle:@"title" forState:UIControlStateNormal];
[UIView setAnimationsEnabled:YES];

시스템 버튼의 경우 애니메이션을 다시 활성화하기 전에이를 추가해야합니다 (@Klaas 감사).

[_button layoutIfNeeded];


답변

performWithoutAnimation:방법을 사용하고 나중에 대신 즉시 레이아웃을 강제 실행 하십시오 .

[UIView performWithoutAnimation:^{
  [self.myButton setTitle:text forState:UIControlStateNormal];
  [self.myButton layoutIfNeeded];
}];


답변

버튼 유형을 사용자 정의 양식 인터페이스 빌더로 변경하십시오.

여기에 이미지 설명을 입력하십시오

이것은 나를 위해 일했습니다.


답변

Swift에서는 다음을 사용할 수 있습니다.

UIView.performWithoutAnimation {
    self.someButtonButton.setTitle(newTitle, forState: .normal)
    self.someButtonButton.layoutIfNeeded()
}


답변

참고 :

_button의buttonType “이 “UIButtonTypeSystem”인 경우 아래 코드는 유효하지 않습니다 .

[UIView setAnimationsEnabled:NO];
[_button setTitle:@"title" forState:UIControlStateNormal];
[UIView setAnimationsEnabled:YES];

_button의buttonType “이 “UIButtonTypeCustom”인 경우 위 코드가 유효합니다 .


답변

iOS 7.1부터 나를 위해 일한 유일한 해결책은 type 버튼을 초기화하는 것 UIButtonTypeCustom입니다.


답변

그래서 나는 일한 해결책을 찾습니다.

_logoutButton.titleLabel.text = NSLocalizedString(@"Logout",);
[_logoutButton setTitle:_logoutButton.titleLabel.text forState:UIControlStateNormal];

먼저 버튼의 제목을 변경 한 다음이 제목의 버튼 크기를 조정하십시오.