UITableViewCell 하위 클래스와 함께“-layoutSubviews를 실행 한 후에도 여전히 자동 레이아웃이 필요합니다.”


115

XCode 4.5 및 iOS 6을 사용하여 사용자 지정 셀이있는 간단한 테이블보기가있는 앱을 개발 중입니다. iOS 5 이하에서이 작업을 수백 번 수행했지만 어떤 이유로 새로운 autoLayout 시스템이 많은 문제를 일으키고 있습니다.

IB에서 테이블 뷰와 프로토 타입 셀을 설정하고 하위 뷰를 추가하고 IBOutlets로 연결 한 다음 델리게이트와 데이터 소스를 설정했습니다. 그러나 이제 첫 번째 셀을에서 가져올 때마다 cellForRowAtIndexPath다음 오류가 발생합니다.

***-[ShopCell layoutSublayersOfLayer :], /SourceCache/UIKit_Sim/UIKit-2372/UIView.m:5776에서 어설 션 실패

*** 포착되지 않은 예외 'NSInternalInconsistencyException'으로 인해 앱 종료, 이유 : '-layoutSubviews를 실행 한 후에도 여전히 자동 레이아웃이 필요합니다. ShopCell의 -layoutSubviews 구현은 super를 호출해야합니다. '

내 하위 클래스 셀 (ShopCell)에서 -layoutSubviews 메서드를 구현하지 않았으며 그렇게하려고 시도해도 슈퍼 호출을 추가해도 여전히 동일한 오류가 발생합니다. IB의 셀에서 하위 뷰를 제거하고 표준 UITableViewCell로 변경하면 물론 셀에 데이터가 남아 있지 않지만 모든 것이 예상대로 작동합니다.

내가 놓친 간단한 것이 있다고 거의 확신하지만 내가 잘못한 것을 제안하는 문서 나 가이드를 찾을 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.

편집 : IB에서 UITableViewCell로 변경하고 모든 하위보기를 그대로 두려고했지만 여전히 동일한 오류가 발생했습니다.


lldb [[UIWindow keyWindow] _autoLayoutTrace]자동 레이아웃이 사용되는 경우 디버거 영역에서 시도하십시오 .
A-Live

3
UITableViewCell 대신 사용자 지정 셀에 UIView를 사용하고 있습니까? 나는 같은 문제가 있었다. 사용자 지정 셀에 대한 UIView가 있었고 여기에 하위 뷰를 추가했습니다. UITableViewCell로 변경되어 작동했습니다.

마이크, 아울렛을 어떻게 정의하고 있습니까? 클래스 확장의 구현 파일에 속성이 있습니까?
kocodude

@ A-Live 해당 메서드를 사용하려고 할 때마다 디버거에서 오류가 발생합니다.이 메서드는 여전히 유효합니까? 편집 : 신경 쓰지 마세요. 자동 레이아웃에서 소문자 l입니다.
borrrden

검사기에서 autoLayout 상자의 선택을 취소 한 다음 정리하고 실행하십시오. 그것은 확실히 작동합니다.
니코

답변:


57

코드에 수동으로 제약 조건을 추가하는 동안 동일한 문제가 발생했습니다. 코드에서 다음을 수행했습니다.

{
    [self setTranslatesAutoresizingMaskIntoConstraints:YES];
    [self addSubview:someView];
    [self addSubview:someOtherView];
    [self addConstraint:...];
}

가설

내가 알 수 있듯이 문제는 비활성화 translatesAutoresizingMaskIntoConstraints하면 UITableViewCell이 자동 레이아웃을 사용하기 시작하고 기본 구현이 layoutSublayersForLayersuper를 호출하지 않기 때문에 자연스럽게 실패한다는 것입니다 . Hopper 또는 다른 도구를 사용하는 사람이이를 확인할 수 있습니다. IB를 사용하고 있기 때문에 이것이 왜 문제인지 궁금 할 것입니다. 그 이유는 IB를 사용하면 translatesAutoresizingMaskIntoConstraints제약 조건을 추가하는 뷰에 대해 자동으로 비활성화되기 때문 입니다 (자동으로 너비 및 높이 제약 조건을 제자리에 추가합니다).

해결책

내 해결책은 모든 것을 contentView.

{
   [self.contentView addSubview:someView];
   [self.contentView addSubview:someOtherView];
   [self.contentView addConstraint:...];
}

이것이 Interface Builder에서 작동하는지 100 % 확신 할 수는 없지만 모든 것을 셀에서 밀어 내면 (직접 무언가가 있다고 가정하면) 작동합니다. 도움이 되었기를 바랍니다.


4
또한 subview.translatesAutoresizingMaskIntoConstraints = NO'contentView 에 추가 하는 각 하위보기를 추가해야했습니다.
Jay Peyer

5
이것은 나를 위해 일했습니다. 또한, 메이크업 확실히 당신은 할 수 없습니다 전화 self.contentView.translatesAutoresizingMaskIntoConstraints = NO을 위해 UITableViewCell.
Maurizio

53

분명히 UITableViewCell의 layoutSubviews 구현은 자동 레이아웃의 문제인 super를 호출하지 않습니다. 아래 카테고리를 프로젝트에 드롭하면 문제가 해결되는지보고 싶습니다. 테스트 프로젝트에 도움이되었습니다.

#import <objc/runtime.h>
#import <objc/message.h>

@implementation UITableViewCell (FixUITableViewCellAutolayoutIHope)

+ (void)load
{
    Method existing = class_getInstanceMethod(self, @selector(layoutSubviews));
    Method new = class_getInstanceMethod(self, @selector(_autolayout_replacementLayoutSubviews));

    method_exchangeImplementations(existing, new);
}

- (void)_autolayout_replacementLayoutSubviews
{
    [super layoutSubviews];
    [self _autolayout_replacementLayoutSubviews]; // not recursive due to method swizzling
    [super layoutSubviews];
}

@end

테이블 셀에서 backgroundView를 사용할 때 표시되는 문제를 추가 할 수 있습니다. 셀에 하위 뷰로 추가되기 때문입니다 (대부분의 하위 뷰는 일반적으로 더 잘 작동하는 테이블 셀의 contentView에 추가되어야 함).

참고 : 이 버그는 iOS7에서 수정 된 것으로 보입니다. 이 코드를 제거하거나 적어도 iOS6에서 실행되는 경우에만 수행되도록 런타임 검사를 추가 할 수있었습니다.


이상한 것은 ... 그것은 그냥 서브 클래스를 위해, 나를 위해 일반있는 UITableViewCell 함께 잘 작동한다는 것입니다
borrrden

당신은 그렇게 생각할 것이지만 내가 가진 것은 init 메소드뿐입니다. 나는 내 인생에서 layoutSubviews를 재정의하지 않았습니다. 문제는 UITableViewCell이 루트 뷰로 사용하는 사용자 정의 뷰가 layoutSubviews를 재정의하기 때문에 자동 레이아웃을 사용할 수 없다는 것입니다 (따라서 루트 뷰에 제약 조건을 추가하려고하면 실패합니다)
borrrden

6
나는에 그런 범주를 만들어야했습니다 UITableView같은 이유로 (아이폰 OS 6.1 B1)
조슈아 J. 맥키

5
문제가 여전히 ios 7에 존재하기 때문에 TableHeaderView에 대한 유사한 수정 사항이 있습니까?
Softlion

1
이것은 훌륭하게 작동합니다. UITableView에서 UIVIew 하위 뷰를 중앙에 배치하려고 할 때이 문제가 발생했습니다. iOS 7에서도 어설 션이 발생합니다. 그러나 iOS 8에서는 발생하지 않으므로 버그를 해결해야합니다.
Jordan H

33

몇 달 동안 같은 버그가있었습니다. 하지만 문제가 무엇인지 발견했습니다.

IB 파일을 만들 때 UIView이미 추가되었습니다. 이보기를 사용하면 자동 레이아웃이 비활성화 되어도 앱이 충돌하지 않습니다 (그러나 다른 문제가 있음). 자동 레이아웃을 사용 하는 경우 개체 라이브러리에서 올바른 보기 를 선택해야합니다 UITableViewCell.

실제로 모든 하위보기가에 추가되므로 항상 이 항목을 사용해야 contentView합니다.UITableViewCell .

그게 다야. 모두 괜찮을 것입니다.


질문은 IB를 사용하는 구현에 관한 것이 아니고 IB를 사용하지 않을 때이 문제가 발생할 수 있기 때문에 허용되는 대답이되어서는 안됩니다. 프로그래밍 방식으로 뷰를 수행하는 경우 @PhilLoden의 대답이 더 실용적입니다.
Eric

나는 대답을 이해하지 못했습니다. 누군가 더 명확하게 설명 할 수 있습니까? 감사합니다
hasan dec

나는 그 권리가 있다고 생각합니다. 클래스 att를 확인하는 것으로 충분합니까? 인터페이스 빌더의 ID 검사기에서? 또는 추가 된 것은 다른 유형 및 클래스 att입니다. 나중에 업데이트 되었습니까? 그것도 문제를 일으키는가?
hasan dec

@ hasan83 실제로 셀을 반환 할 수 있습니다. UITableViewCell은 기본적으로 재사용 식별자가있는 UIView입니다.
Arnaud

17

나는 custom UITableViewHeaderFooterView+ xib 와 같은 문제가 있었다 .

여기에서 몇 가지 답변을 보았지만 -layoutSubviews사용자 지정 바닥 글보기 클래스에서 어떤 구현 이 문제를 해결 하는지 발견 했습니다.

-(void)layoutSubviews
{
    [super layoutSubviews];
    [self layoutIfNeeded]; // this line is key
}

1
이 마지막으로 무한 루프와 초래할 수 있음을주의 EXC_BAD_ACCESS KERN_PROTECTION_FAILURE
MBI

15

내 layoutSubviews 구현에서 제약 조건을 수정 한 결과로 이것을 보았습니다. 메서드의 처음부터 끝까지 호출을 super로 이동하면 문제가 해결되었습니다.


이것은 나를 위해 일했습니다. layoutSubviews에서 서식을 지정하는 사용자 지정 UICollectionViewCell이 있습니다. 이 솔루션이 작동하는 이유를 아는 사람이 있습니까?
STANGMMX 2013 년

@STANGMMX, A'sa Dickens의 답변이 그 이유를 설명합니다.
Fábio Oliveira

15

iOS 7에서 동일한 문제가 발생했습니다 (iOS 8이 수정 된 것 같습니다). 나에게 해결책 [self.view layoutIfNeeded]은 내 viewDidLayoutSubviews방법 이 끝날 때 전화하는 것이 었습니다 .


감사합니다. 어제 (iOS 7에서)이 문제를 만났습니다. 그것은 아이폰 OS 7을위한 도움
알렉산더

@MaciejSwic 상단에서 내 대답을 참조하십시오.
Sound Blaster

이것은 나를 위해 일했습니다! Swift와 함께 iOS 7.1 사용. viewDidLayoutSubviews에 대한 제약 조건을 제거하고 추가했습니다. 수퍼 콜을 제거했지만 여전히 작동하지 않았지만이 솔루션이 트릭을 수행했습니다! 이 공룡에게 잎사귀를주세요! :)
jomafer 2015 년

iOS 7.1을 사용하여 나를 위해 일했습니다!
fdlr

14

나는 같은 문제가 있었다. 문제는 제가 Xib 셀을 만드는 방식에있었습니다. 평소처럼 Xib를 만들고 기본 "UIView"유형을 사용자 지정 UITableViewCell 클래스로 변경했습니다. 올바른 방법은 먼저 기본보기를 삭제 한 다음 테이블보기 셀 개체를 xib로 끌어 오는 것입니다. 자세한 내용은 여기 : http://allplayers.github.io/blog/2012/11/18/Custom-UITableViewCell-With-NIB/


1
완벽한 통찰력! 특히 AutoLayout이 비활성화 된 UIView를 사용하면 내 앱이 충돌하지 않기 때문에 시간이 오래 걸립니다.
Guilherme 2013 년

감독자! 아래 @Arnaud respone 참조
Lubbo

7

사용자 지정 테이블보기 셀의 모든 하위보기에 대해 "자동 레이아웃"을 해제하여 문제를 해결했습니다.

사용자 정의 셀의 xib에서 하위보기를 선택하고 File Inspector> Interface Builder Document> Use Autolayout을 선택 취소합니다.


4
나도 똑같이했다. 그래도 자동 레이아웃을 사용하려는 경우 실제로 해결책은 아닙니다
ajmccall

7

나는 비슷한 문제가 UITableViewCell아니라 오히려 UITableView그 자체에 있었다. Google의 첫 번째 결과이므로 여기에 게시하겠습니다. 그것이 viewForHeaderInSection문제 라는 것이 밝혀졌습니다 . 를 만들고로 UITableViewHeaderFooterView설정 translatesAutoresizingMaskIntoConstraints했습니다 NO. 이제 흥미로운 부분이 있습니다.

IOS 7:

// don't do this on iOS 7
sectionHeader.translatesAutoresizingMaskIntoConstraints = NO;

이렇게하면 앱이 충돌합니다.

-layoutSubviews를 실행 한 후에도 자동 레이아웃이 필요합니다. UITableView의 -layoutSubviews 구현은 super를 호출해야합니다.

좋아요, 테이블 뷰 헤더와 하위 뷰에서만 자동 레이아웃을 사용할 수 없다고 생각했습니다. 그러나 그것은 나중에 보게 될 완전한 진실이 아닙니다. 요약하자면 : iOS 7에서 헤더에 대한 자동 크기 조정 마스크를 비활성화하지 마십시오. 그렇지 않으면 정상적으로 작동합니다.

iOS 8 :

// you have to do this, otherwise you get an auto layout error
sectionHeader.translatesAutoresizingMaskIntoConstraints = NO;

이것을 사용하지 않으면 다음과 같은 출력이 표시됩니다.

제약 조건을 동시에 충족 할 수 없습니다.

iOS 8의 경우 헤더에 대한 자동 크기 조정 마스크를 비활성화해야합니다.

왜 이런 식으로 작동하는지 모르겠지만 Apple이 iOS 8에서 몇 가지 사항을 수정했으며 iOS 7 및 iOS 8에서 자동 레이아웃이 다르게 작동하는 것 같습니다.


내 하루를 구해줘!
Marcin Małysz

5

위의 누군가가 이미 언급했듯이 UITableView에서 사용할 뷰를 만들 때 기본적으로 생성 된 뷰를 삭제하고 루트 뷰로 UITableViewCell 또는 UITableViewHeaderFooterView를 끌어 야합니다. 그러나 해당 부분을 놓친 경우 XIB를 수정하는 방법이 있습니다. 당신은 텍스트 편집기에서 루트 태그와 직접적인 자식 추가의 XIB 파일을 열 필요가 / 속성 변경 translatesAutoresizingMaskIntoConstraints에를 YES예를 들면,

<view contentMode="scaleToFill" horizontalHuggingPriority="1000" id="1" translatesAutoresizingMaskIntoConstraints="YES" customClass="MXWCollapsibleTableHeaderView">


2

나는 이것을 만나고 있으며 특히 다른 사용자 정의 UIView 하위 클래스가 추가 된 프로토 타입 셀로서 UITableViewCell 하위 클래스와 관련이있는 것 같습니다. UIKit 자식 만있는 셀로 성공했기 때문에 여기서 '사용자 지정'을 강조하지만, 내가 맞춤형으로 만든 뷰에 대한 제약 조건을 구축하려고하면 작성자 질문에 명시된 오류가 발생합니다.

AutoLayout을 사용하지 않는 독립적 인 펜촉으로 셀을 분리해야했습니다.

Apple이이 문제를 해결하기를 바랍니다.


2

셀 자체 대신 셀의 contentView에 하위보기를 추가하십시오. 그래서 대신 :

[self addSubview:someView];

당신은 사용해야합니다

[self.contentView addSubview:someView];


1

처음에 UITableViewCell 대신 UIView를 xib 파일에 추가했기 때문에이 문제가 발생했습니다.


1

나는 결합 해제하여이 오류를 제거 backgroundView내 배경에서 커넥터 UIImageViewaccessoryView내에서 커넥터를 UIButton사용자 정의한. 나는 이것들이 내가 사용했던 방식대로 사용되지 않았을 것이라고 생각합니다.


1

오늘이 문제를 처음 접했습니다. 지금까지 프로토 타입 UITableViewCell 서브 클래스 사용에 대한 다양한 경험이 있었지만이 문제는 발생하지 않았습니다. 내가 작업 한 셀에서 다른 점은 셀 색상을 지정하는 데 사용하는 -backgroundView에 대한 IBOutlet이 있다는 것입니다. 새 속성을 만들고 전체 셀의 범위를 확장하는 새로운 UIView를 추가하면이 주장이 사라진다는 것을 알았습니다. 이것이 원인인지 확인하기 위해 다시이 뷰를 backgroundView 콘센트에 연결하고 어설 션이 다시 나타났습니다. 지금까지이 변경을 수행 한 이후로 하위 클래스 화 된 프로토 타입 UITableViewCell에서 AutoLayout을 사용하는 다른 문제는 없습니다.


1

이 문제에 대한 적절한 해결책을 얻지 못했지만 프레임을 사용하고 translatesAutoresizingMaskIntoConstraints 속성을 No로 설정하지 않고 해결할 수 있습니다 (기본적으로 yes이므로 설정하지 마십시오).

CGRect headerViewFrame = CGRectMake(0,0,320,60); //Frame for your header/footer view
UIView *tableHeaderView = [[UIView alloc] initWithFrame:headerViewFrame];
tableHeaderView.translatesAutoresizingMaskIntoConstraints = Yes; //Or don't set it at all
[self.tableView setTableHeaderView:tableHeaderView];

0

저도 같은 일을 겪고 있습니다. 자동 레이아웃을 사용하는 ShopCell .xib / storyboard의 하위보기를 다른보기에 대한 하위보기로 프로그래밍 방식으로 추가하면 제약 조건이 구성된 방법에 따라 해당 예외가 발생할 수 있습니다. 내 생각 엔 IB에서 생성 된 제약은 viewC의 하위 뷰로 viewB를 추가 할 수있는 동안 viewA-> viewB에서 제약을 유지하기 때문에 프로그래밍 방식으로 뷰를 하위 뷰로 추가 할 때 문제를 일으키는 것입니다. 알 겠어요 (그 문장은 나 자신을 헷갈 리게합니다)?

내 상황에서-문제를 ​​일으킨 것은 매우 단순한 뷰 였기 때문에-IB가 아닌 프로그래밍 방식으로 뷰를 만들었습니다. 그것은 그것을 해결했습니다. 이러한 뷰를 다른 xib 파일로 추출하고 자동 레이아웃을 비활성화 할 수 있습니다. 그게 효과가있을 것 같아요.


0

어떤 상황에서는 레이아웃 문제를 쉽게 해결할 수 있습니다 (레이아웃에 따라 다름). awakeFromNib 또는 init에서 UITableView 하위 클래스 내부에서 자동 크기 조정 마스크를 설정합니다.

self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

기본적으로 UIViewAutoresizingNone으로 설정됩니다.


이것은 내가 직면 한 문제를 해결했습니다. [tableViewCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height높이를 얻기 위해 테이블 셀 내에서 자동 레이아웃 을 사용하고 heightForRowAtIndexPath있습니다.
NathanAldenSr

0

나의 경우에는,

UITableView의 자동 레이아웃에 대해 참조 된 UIImageView는 UITableView의 backgroundView에 할당됩니다.

self.tableView.backgroundView = self.tableBackgroundImageView;

그래서 UIView (Root view)에서 backgroundView에 대한 UIImageView를 제거하고 해당 UIImageView에 대한 모든 자동 레이아웃 참조를 재설정 (제거)했습니다. UIView (root view)에서 외부에 배경 용 UIImageView를 배치했습니다. 그런 다음 코드에서 UITableView의 backgroundView에 할당하십시오.

그런 다음 수정되었습니다.


0

해결책을 찾았습니다.

제 경우에는 스토리 보드 (자동 레이아웃 사용)에 셀의보기를 만들고 ViewController.m에서 사용자 지정 UITableViewCell 인터페이스를 정의했습니다. 인터페이스를 ViewController.h로 이동해야합니다.


0

스토리 보드를 사용하여 사용자 지정 UITableViewCell을 만들 때 동일한 문제가 발생했습니다. 다행히도 내가 엑세서리 뷰 ([UITableViewCell setAccessoryView :])를 내가 셀에 추가 한 UIButton으로 출력했기 때문에 문제를 발견했습니다.

그래서 iOS6에서 실행할 때 내 프로젝트에서 발생했습니다.

해결책

사용자 지정 셀이 포함 된 내 버튼과 accessoryView 사이의 콘센트를 해제합니다.

신청

UITableViewCell의 기본 요소를 사용하여 변경해서는 안됩니다.


0

이 문제는 [super viewDidAppear:]viewDidAppear에서 전화하는 것을 잊었을 때 발생할 수 있지만 이것이 유일한 원인은 아닙니다.


0

나는 똑같은 문제가 있었다. 내 프로젝트의 문제는 다음과 같습니다
. Interface Builder에서 사용자 지정 UITableViewCell을 만들 때 Xcode의 개체 컬렉션 창에서 테이블 뷰 셀 대신 를 사용자 지정 테이블 셀로 드래그 했습니다 . 동일한 상황에있는 경우 해결 방법은 다음과 같습니다. 인터페이스 빌더에서보기를 삭제하고 개체 컬렉션 창에서 테이블보기 셀을 끌어서 사용자 정의 테이블 셀보기를 다시 실행하십시오. 이전보기의 개체를 복사하여 새 테이블보기 셀의 캔버스에 붙여 넣을 수 있습니다.



0

Xcode 6, iOS 7+에서 설정 한 테이블 바닥 글보기와 매우 유사한 문제가 발생했습니다. 해결책은 nib 파일 형식이었습니다. 분명히 그것은 Xcode 4 형식 또는 무언가에 갇혀있었습니다. 파일 설정을 "열기 : Xcode 6.0"(또는 기본값)으로 변경하면 즉시 수정되었습니다. 우연히 해결책을 찾았습니다. 그것은 나를 미치게 만들었 기 때문에 전체 파일을 삭제하고 분명히 기본 설정으로 다시 만들었습니다. 일반적으로 발생하는 것처럼 최신 Xcode에서 파일을 단순히 편집해도 Xcode 5+ 형식으로 변환되지 않은 이유를 모르겠습니다.

에프


0

나는 똑같은 문제가 있었다. 내 DetailViewController로 이동하여 식별자 이름을 UIView로 변경했습니다. 이전에는 UITableView에있었습니다. 문제가 해결되었습니다. 이 문제는 DetailViewController에있을 필요는 없습니다. 다른 어떤 것일 수도 있습니다. 존경받는 식별자로 이름을 바꾸십시오.


0

IB의 정적 테이블 뷰 셀과 비슷한 문제가 있습니다. 셀 중 하나에 UITextfield의 하위 클래스로 실수로 변경된 클래스가있는 하위보기가 있습니다. 컴파일러는 경고 / 오류를 제공하지 않았습니다. 그러나 런타임에 시스템은 앞서 언급 한 충돌로 인해 뷰 컨트롤러를로드 할 수 없었습니다.



0

솔루션 : 슈퍼 레이아웃을 호출하기 전에 제약 조건 변경

- (void)layoutSubviews
{

    [self _updateConstraints];

    [super layoutSubviews];
}

0

대신 Carl Lindberg의 대답 을 수정 하여 UITableView대신 작동하기 시작했습니다.

UITableView + AutoLayoutFix.h

@interface UITableView (AutoLayoutFix)
@end

UITableView + AutoLayoutFix.m

#import <objc/runtime.h>

@implementation UITableView (AutoLayoutFix)

+ (void)load
{
    Method existingMethod = class_getInstanceMethod(self, @selector(layoutSubviews));
    Method newMethod = class_getInstanceMethod(self, @selector(_autolayout_replacementLayoutSubviews));

    method_exchangeImplementations(existingMethod, newMethod);
}

- (void)_autolayout_replacementLayoutSubviews
{
    [super layoutSubviews];
    [self _autolayout_replacementLayoutSubviews]; // not recursive due to method swizzling
    [super layoutSubviews];
}

@end

그런 다음 MyViewController.m방금 카테고리를 가져 왔습니다.

#import "UITableView+AutoLayoutFix.h"

0

나는 같은 문제를 만났고 마침내 그 이유 는 UITableViewCell의 contentView 여야하는 UITableViewCell에 하나의 제약 조건을 추가 했기 때문 입니다. 제약 조건을 변경했을 때 모든 것이 잘되었습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.