문제

알림 센터에서 앱의 확장의 높이를 어떻게 변경할 수 있습니까?

인터페이스 빌더와 코드로 그것을 시도했습니다. 인터페이스 빌더는 높이 600의 뷰를 표시하지만 장치 에이 높이를 적용하지는 않습니다.

몇 가지 80 픽셀보다 크게 얻을 수없는 것 같습니다 ...

여기에 이미지 설명

도움이 되었습니까?

해결책

위젯 UIViewController.m (objective-c) :

self.preferredContentSize = CGSizeMake(0, 200);
.

은 위젯이 200의 높이를 갖도록합니다.

위젯은 자동으로 처리되는 알림 센터의 정확한 너비에 적합해야함에 따라 Widgets는 영향을 미치지 않습니다.

또한보기 높이가 변경 사항을 움직이려면 구현할 수 있습니다 (objective-c) :

- (void)viewWillTransitionToSize:(CGSize)size
       withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
.

-animateAlongsideTransition:completion: / P>

대답은 조금 숨겨져있었습니다. 문서 사이드 바에서 NoFollow noreferrer"> 이 환상적인 문서 .


또 다른 방법은 자동 레이아웃 제약 조건을 사용하여보기의 높이를 제한합니다.

다른 팁

위젯은 시스템에 의해 높이를 조정합니다.제약 조건을 사용하여 높이를 정의한 경우 필요에 따라 자동으로 조정됩니다.명시 적 레이아웃을 사용하는 경우 위젯의 preferredContentSize를 수정하여 새 높이를 요청할 수 있습니다.

보장 알림 센터가 귀하의 신장 요청을 존중하지 않습니다. 자동으로 조정될 수 있지만 원하는 정확한 높이가 아니라 조정될 수 있지만 전혀 존중받지 못할 수도 있습니다.

위젯을 개발하는 가장 좋은 방법은 자동 레이아웃 제약 조건을 사용하여 위젯이 쉽게 다른 높이에 적응할 수있는 높이 값을 설정하는 것입니다.

iOS 10 확장의 높이가 110 픽셀이기 때문에

.새로운 프로토콜 메소드 widgetActiveDisplayModeDidChange:withMaximumSize:를 사용하여 확장 크기 확장 (objective-c) :

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode
                         withMaximumSize:(CGSize)maxSize {

    if (activeDisplayMode == NCWidgetDisplayModeExpanded) {
        self.preferredContentSize = CGSizeMake(maxSize.width, 600.0);
    } else if (activeDisplayMode == NCWidgetDisplayModeCompact) {
        self.preferredContentSize = maxSize;
    }
}
.

또한 Today View 컨트롤러의 setWidgetLargestAvailableDisplayMode: 메소드 (objective-c)에서 viewDidLoad를 호출해야 할 수도 있습니다.

if ([self.extensionContext respondsToSelector:@selector(setWidgetLargestAvailableDisplayMode:)]) { // iOS 10+
    [self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
} else {
    self.preferredContentSize = CGSizeMake(0, 600.0); // iOS 10-
}
.

이 스레드는 도움이 될 수 있습니다 https://forums.developer.apple.com/thread/48930 / P>

최적의 방법은 물론 자동 레이아웃이지만 기본적 으로이

처럼 제어 할 수있는 여백이 있습니다.
func widgetMarginInsetsForProposedMarginInsets
    (defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) {
    return UIEdgeInsetsZero
}
.

오늘 확장을 표시하는 두 가지 방법이 있습니다.

  1. 컴팩트 모드 (위젯의 고정 높이)
  2. 확장 모드 (위젯의 가변 높이)
  3. 컴팩트 모드에서 확장자의 높이를 변경하기 위해 수행하는 코드는 무엇이든 차이가 없습니다.따라서 모드를 컴팩트에서 확장 모드로 변경해야합니다.

    // 1. Load This in viewDidLoad:
    
    override func viewDidLoad() {
      super.viewDidLoad()
      self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded
    }
    
    // 2. Implement another widget protocol
    
    func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize){
      if (activeDisplayMode == NCWidgetDisplayMode.compact) {
        self.preferredContentSize = maxSize;
      }
      else {
        self.preferredContentSize = CGSize(width: 0, height: 200);
      }
    }
    
    .

    앱 확장

    에 대한 업데이트가 더 많은 WWDC를 참조 할 수 있습니다.

오늘의 위젯 기본 UiedgeInsets DefaultMargininsets (UiedgeInsets) defaultMargininsets= (top= 0, leak= 44, 아래= 39, 오른쪽= 0)

이 방법을 추가해야합니다

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(0, 44, 0, 0);
return edgeInsets;}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top