programing

자동 조정 Scroll View의 차이 설명삽입, extendedLayoutIncludesOpaqueBars, 엣지 ForExtendedLayout iOS7

codeshow 2023. 4. 17. 22:11
반응형

자동 조정 Scroll View의 차이 설명삽입, extendedLayoutIncludesOpaqueBars, 엣지 ForExtendedLayout iOS7

iOS7 UI의 이행에 대해 많이 읽고 있습니다.

이 세 가지 속성을 얻을 수 없습니다.automaticallyAdjustsScrollViewInsets,extendedLayoutIncludesOpaqueBars,edgesForExtendedLayout??

예를 들어 뷰 컨트롤러를 상태 표시줄 아래에서 시작하려고 하지만 실행할 수 없습니다.

iOS7부터는 뷰 컨트롤러가 기본적으로 전체 화면 레이아웃을 사용합니다.동시에 뷰 레이아웃을 보다 상세하게 제어할 수 있습니다.이러한 속성은 다음과 같습니다.

Edges For Extended Layout

기본적으로 이 속성을 사용하여 화면 전체를 덮도록 뷰의 어느 쪽을 확장할 수 있는지 설정할 수 있습니다.당신이 밀었다고 상상해보세요.UIViewControllerUINavigationController뷰 컨트롤러의 뷰를 배치하면 네비게이션바가 끝나는 곳에서 시작되지만 이 속성은 화면 전체를 채우기 위해 뷰의 어느 쪽(위, 왼쪽, 아래, 오른쪽)을 확장할 수 있는지를 설정합니다.

예를 들어 보겠습니다.

UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

여기서는 다음 값을 설정하지 않습니다.edgesForExtendedLayout따라서 디폴트값이 사용됩니다(UIRectEdgeAll보기 레이아웃을 확장하여 화면 전체를 채웁니다.

결과는 다음과 같습니다.

확장된 레이아웃을 위해 모서리가 없으면 보기가 전체 화면을 채웁니다.

보시는 바와 같이 빨간색 배경은 탐색 모음과 상태 표시줄 뒤로 확장됩니다.

이제 이 값을 다음과 같이 설정합니다.UIRectEdgeNone따라서 뷰 컨트롤러에 화면을 덮기 위해 뷰를 확장하지 않도록 지시합니다.

UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

그 결과:

edgesForExtendedLayout이 설정된 경우 뷰는 탐색 바로 아래에 있습니다.


자동 조정 Scroll View설치

이 속성은 뷰가 다음과 같은 경우 사용됩니다.UIScrollView또는 이와 유사합니다.UITableView테이블이 네비게이션 바의 끝부분부터 시작되도록 해야 합니다. 그렇지 않으면 전체 콘텐츠가 표시되지 않지만 스크롤 시 테이블이 화면 전체를 덮도록 해야 합니다.이 경우 설정edgesForExtendedLayout"없음"은 테이블이 네비게이션 바가 끝나는 곳에서 스크롤을 시작하고 테이블 뒤로 이동하지 않기 때문에 작동하지 않습니다.

여기서 이 속성이 편리합니다.뷰 컨트롤러가 자동으로 inset을 조정하도록 하면(이 속성을 YES로 설정, 기본값으로도 설정) 테이블 상단에 inset이 추가되므로 테이블은 네비게이션바가 끝나는 곳부터 시작되지만 스크롤은 화면 전체를 덮습니다.

이 NO로 설정되어 있는 경우는 다음과 같습니다.

테이블이 전체 화면 위로 스크롤되지만, 부분적으로 가려진 상태로 시작합니다.

[YES] (디폴트):

테이블은 화면 전체를 스크롤하여 네비게이션 바로 아래에서 시작합니다.

두 경우 모두 테이블이 탐색 모음 뒤로 스크롤되지만, 두 번째 경우(YES)에는 탐색 모음 아래에서 시작됩니다.


extended Layout 포함 Opaque Bars

이 값은 이전 값에 대한 추가 값일 뿐입니다.기본적으로는 이 파라미터는 NO로 설정되어 있습니다.하도록 확장되지 범위를 표시줄이 포함되도록 되지 않습니다edgesForExtendedLayout로로 합니다.UIRectEdgeAll를 참조해 주세요.

값을 YES로 설정하면 보기가 상태 표시줄 아래로 다시 이동할 수 있습니다.

궁금한 게 있으면 댓글로 남겨주시면 제가 대답할게요.

iOS는 어떤 UIScroll View를 사용하는지 어떻게 알 수 있습니까?

의 첫 를 취득합니다.서브클래스가 View Controller의 (0의 서브클래스일 경우)는 ViewController 뷰의 첫 번째 서브뷰를 합니다.UIScrollView런음

이 은 '아, 아, 아'라는 뜻이겠죠.UITableViewController).UITableView첫 번째 뷰입니다).

스토리보드를 사용하는지는 확실하지 않지만 사용 중인 경우 뷰 컨트롤러를 상태 표시줄 아래(및 아래쪽 표시줄 위)에서 시작하도록 하려면 다음과 같이 하십시오.

IB에서 뷰 컨트롤러를 선택하고 속성 검사기에서 '연장 에지 - 상단 막대 아래' 및 '연장 에지 - 하단 막대 아래' 선택을 취소합니다.

스토리보드를 사용하고 있고, 위의 조언은 효과가 있었지만, 어떻게 구현해야 할지 잘 몰랐습니다.다음은 권장 솔루션을 ViewController에 삽입하여 문제를 해결한 간단한 예입니다.

import Foundation
import UIKit

// This ViewController is connected to a view on a storyboard that 
// has a scrolling sub view.
class TheViewController: UIViewController {

  // Prepares the view prior to loading.  Putting it in viewDidAppear didn't work.
  override func viewWillAppear(animated: Bool) {

    // this method is an extension of the UIViewController 
    // so using self works as you might expect.
    self.automaticallyAdjustsScrollViewInsets = false

    // Default is "true" so this sets it to false tells it to use 
    // the storyboard as you have it placed
    // and not how it thinks it should place it.
  }

}

: : 시뮬레이터의 차이가 발생합니다.스토리보드 설계와 시뮬레이터 간에 차이를 일으키는 자동 조정은 기본적으로 참으로 설정됩니다.

조정이되었습니다.위의 코드가 적용되어 자동 조정이 해제됩니다. 위의 코드가 적용되어 자동 조정이 해제됩니다.

행을 했는데, 는 이 행과 였습니다.UIView 아니라, 이에요.UIScrollView

self.navigationController.navigationBar.translucent = NO;

딱 마음에 새기다automaticallyAdjustsScrollViewInsets(테이블 컬렉션 뷰 등)가 크크테테 ( ,,,,테,, )테테테 property ( property property,, property property property property property property property property property property property property property property property property property property property property property property property property property property property property property property property property property property property property,,,,,,,,,,, property property )일 경우에만 기능합니다

  • VC 표시 또는
  • 이 보기의 첫 번째 하위 보기

기타는 첫 번째 하위 보기인 경우에도 작동하지만 보기 계층에 다른 스크롤 보기가 있다고 제안합니다.

편집(확장 DIY)

이러한 조건을 만족시킬 수 없는 경우(예: 스크롤 보기 아래에 배경 이미지가 있는 경우)에도 유사한 동작을 원할 경우 스크롤 보기 삽입을 수동으로 조정할 수 있습니다.하지만 SO에 대해 많은 사람들이 제안하는 것처럼 44, 64, 심지어 20과 같이 일정하게 설정하지 마세요.사이즈는 절대 알 수 없어요.incall/gps/audio 알림이 있을 수 있습니다.네비게이션 바가 항상 44포인트일 필요는 없습니다.

layoutGuide는 layoutGuide를 합니다.length: didLayoutSubviews :

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    scrollView.contentInset = UIEdgeInsets(top: topLayoutGuide.length, left: 0, bottom: 0, right: 0)
    scrollView.scrollIndicatorInsets = scrollView.contentInset
}

bottomLayoutGuide도 같은 방법으로 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/18798792/explaining-difference-between-automaticallyadjustsscrollviewinsets-extendedlayo

반응형