2014-09-18 9 views
6

내가 자동 레이아웃, 나는 작은 UISwitch을하고이를 실현하기 위해 view.transform = CGAffineTransformMakeScale(0.5, 0.5)를 사용하려면iOS8의 다른 동작 : view.transform와 자동 레이아웃 = CGAffineTransformMakeScale (0.5, 0.5), 뷰가 제대로

를 사용하고 배치되지 않습니다.

이 스위치 위에 다른보기가 있습니다. 이 스위치를 선도하는이 볼의 앞 가장자리에 정렬하고, 아래 그림과 같은보기와 스위치 사이의 고정 된 수직 공간이되어야한다

enter image description here iOS7에

에 조회수

그러나 다른 모습 iOS8의에있다가 : 제약이 스위치에 적용되지 않습니다처럼

iOS8의

enter image description here 뷰 보인다.

하지만 self.view.layoutSubviews()self.view.layoutIfNeeded()

그것은 작동하지 않습니다라고.

이 스위치를 위보기의 오른쪽 하단 모서리에 항상 붙여 놓는 방법은 무엇입니까? 여기

의 크기가 축소되지 스위치입니다

enter image description here

+0

자동 레이아웃 레이어 변환 작동하지 않습니다 –

+0

@ MaxMacLeod 왜 iOS7과 iOS8에서 같은 코드가 다른 동작을하는지 궁금합니다. 나는이 대답을 의미한다고 생각 [링크] (http://stackoverflow.com/questions/12943107/how-do-i-adjust-the-anchor-point-of-a-calayer-when-auto-layout-is- 사용중/14105757 # 14105757), 맞습니까? –

+0

UISwitch의 본질적인 콘텐츠 크기가 기본 w : 51px h : 31px로 유지되므로보기 변환이 변경 되더라도 그 것처럼 동작합니다. UISwitch를 서브 클래스 화하고 CGSizeMake (25.5f, 15.5f)를 반환하여 - (CGSize) intrinsicContentSize 메서드를 재정의해야합니다. –

답변

0

당신은 여기 두 가지 방법이 있습니다 중 하나를 서브 클래스 UISwitch을 하위 클래스에 필요한 모든 수정 사항을 적용하려고하거나 포함하는 새로운 UIView의 정의를 수정 된 UISwitch를 하위보기로 사용합니다. 하위 클래스가 가장 빠르지 만, UISwitch가 이러한 종류의 수정을위한 하위 클래스가 아니기 때문에 하위 클래스가 더 까다 롭고 위험합니다.

당신이 하위 클래스의 경로를 이동 가정하면, 여기 당신이해야 수정은 다음과 같습니다

  1. 는 스케일링 분명히, self 변환을 적용.

  2. alignmentRectForFrame:을 재정의하면 super.alignmentRectForFrame:에 크기 조정 변환이 더해집니다.

  3. 오버라이드 intrinsicContentSize 그것이 super.intrinsicContentSize 반환 플러스 스케일링

기본적으로, 숫자는 실제 영상 변환을 수행해야하므로 변환. 하지만 기본적으로 AL은 변형을 인식하지 못하기 때문에 자동 레이아웃에 새 뷰의 크기를 알리는 데 2와 3이 필요합니다. 뷰의 중심을

0

다음은 뷰의 변환 걸리는 곳, 그래서 당신이 호출 할 때

view.transform = CGAffineTransformMakeScale(0.5, 0.5) 

그것이 아이폰 OS 8과 같습니다 있다는 의미가 있습니다, 아이폰 OS 7이 좋아 보이는 이유는 아마도 iOS 7의 버그 때문일 수 있습니다.

시도는 다음과 같이 주요 제약의 일정을 변경하려면 다음

self.switchLeadingConstraint.constant = -(self.mySwitch.bounds.size.width/4) 

당신이 아이폰 OS에있는 오프사이드에 보상 할 수있는이 방법을 8