2014-09-24 3 views
9

은 여기 내 스토리 보드아이폰 OS 8 오늘 위젯 정렬 문제

enter image description here

내가 크기의 클래스를 사용하여 자동 레이아웃을 사용하고 있지 않다이다.

내가 아이폰 5S에 그것을 실행하면 잘 작동

. (가로 및 세로 모두) enter image description here

을하지만 아이폰 6 플러스 (세로)에 그것을 실행했을 때, 제대로 정렬 아니에요. enter image description here

(iPhone 6의 경우) (가로), 더 나빠요. enter image description here

가 나는 여백을 설정 -widgetMarginInsetsForProposedMarginInsets:을 사용할 수 있습니다 알고 있지만, 그 경우에 나는 모든 장치에 대한 마진을 사용자 정의해야합니다. 즉 :(

그래서 덜 고통스럽게 제목에 서브 뷰를 정렬 할 수있는 방법이 무서운 것

+0

자동 레이아웃을 사용하고 있습니까? 그렇다면 컨테이너 여백으로 제약 조건을 설정하기 만하면됩니다. –

+0

하지만 마진은 무엇입니까, 다른 장치/방향에 따라 다릅니다 – Keoros

+0

시스템이 각 장치에 올바른 마진을 설정한다고 생각합니다. –

답변

5

수동으로 설정해야하는 것처럼 보입니다. 제약 조건을 만든 다음 IBOutlet을 지정하고 장치/방향에 따라 상수를 설정하면됩니다. (1) (2 픽셀)

  • 6 - - 1 (2 픽셀)
  • 6 플러스 세로 - 5 (15 픽셀)
    • 5S를 :

      참고로, 여기 당신이 필요로 발견 여백은

    • 6 플러스 풍경 - 34 (102px)

    당신은 세로 아이폰 태평양 표준시 04시 14분 인 확장 뷰의 크기에서 필요로하는 어느 찾을 수 있습니다 6.

    +0

    iPad의 풍경과 초상화는 어떨까요? – Erich

    9

    가장자리 인세 트를 0으로 설정하면 문제가 해결됩니다.

    - (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets 
    { 
        return UIEdgeInsetsZero; 
    } 
    
    +0

    iOS 9에서는 인셋을 완전히 제거하고 더 악화됩니다. –

    +0

    감사합니다 ~ 도움이 많이. iOS 9.1에서 잘 작동합니다. –

    0

    일부 장치의 수정. Ericas UIDevice-Extension이 (가) 필요합니다.

    - (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets 
    { 
        defaultMarginInsets.bottom = 0; 
    
        if ([UIDevice.currentDevice.modelIdentifier containsString:@"iPhone7,1"] && self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact) { 
         defaultMarginInsets.left += 5; 
        } else if ([UIDevice.currentDevice.modelIdentifier containsString:@"iPhone7,1"] && self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { 
         defaultMarginInsets.left += 34; 
        } else { 
         defaultMarginInsets.left += 1; 
        } 
    
        return defaultMarginInsets; 
    }