오늘 위젯 확장의 높이를 설정하는 방법은 무엇입니까?
-
21-12-2019 - |
문제
알림 센터에서 앱의 확장의 높이를 어떻게 변경할 수 있습니까?
인터페이스 빌더와 코드로 그것을 시도했습니다. 인터페이스 빌더는 높이 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
를 수정하여 새 높이를 요청할 수 있습니다.
보장 알림 센터가 귀하의 신장 요청을 존중하지 않습니다. 자동으로 조정될 수 있지만 원하는 정확한 높이가 아니라 조정될 수 있지만 전혀 존중받지 못할 수도 있습니다.
위젯을 개발하는 가장 좋은 방법은 자동 레이아웃 제약 조건을 사용하여 위젯이 쉽게 다른 높이에 적응할 수있는 높이 값을 설정하는 것입니다.
.새로운 프로토콜 메소드 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. 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;}
.