SDAutoLayout 사용

5642 단어

SDAutoLayout의 장점과 단점


장점


1. 문법이 간단하다(공식 문법, Masonry) 2. 순수 코드의 방식은 코드 유지가 쉽다(xib,storyboard를 사용하는 것보다 쉽다) 3. UIlabel의 내용은 내용에 따라 폭을 자동으로 계산할 수 있다. 4, UItableviewCell은 자동으로 Height 5를 계산할 수 있고 UIView는 자동으로 Height 6를 계산할 수 있다. 창설할 때 alloc->init만 있으면 대응하는 프레임 5에 관심이 없다.

결점


1. leftspace toview 등 방식은 UIView가 배치된 후에 자주 볼 수 없고 때로는 정확하지 않다. 때로는self의 왼쪽 기준이고 때로는self의 오른쪽을 기준으로 한다. 일반적으로self의width는 모두 화면 너비이기 때문에 하위 컨트롤러의 x는 화면을 자주 날아간다. 2. 예상보다 많은 비용을 들일 때 디버깅을 한다.

SDAutoLayout의 사랑과 아픔


솔직히 SDAutoLayout이 정말 예상한 편리한 사용을 할 수 있다면 시원할 것 같지만 개인적으로는 그 정도는 아닌 것 같아요.물론 나의 능력에 한계가 있을 수도 있다. 많은 것들이 표면에만 머물러 있고 어쩔 수 없다. 별로 신경을 쓰지 않고 원천을 개척하고 쉽게 포기하고 싶지 않아서 원천 코드를 뜯어먹을 수밖에 없다.

원본 코드 분석


1. 프로젝트 주소
https://github.com/gsdios/SDAutoLayout
2. 서류 총수는 사실대로 말하면 서류도 많지 않고 4개만 있다.이것도 내가 원본 코드를 뜯어먹고 싶은 강력한 이유다.
3. 코드 총수

146 ./UITableView+SDAutoTableViewCellHeight.h
374 ./UITableView+SDAutoTableViewCellHeight.m
457 ./UIView+SDAutoLayout.h
1712 ./UIView+SDAutoLayout.m
2689 total
4, 원본 요약 1) 키워드 활용 sdlayout, SDAutoLayoutModel을 생성하여 부모 클래스의 autoLayoutModelsArray 그룹에 추가합니다.2、sdlayoutSubviews는 위에서 생성된 SDAutoLayoutModel에 따라 프레임을 계산합니다
3) 프로세스 분석 1) 먼저 sd 사용layout은 부류에 일련의 SDAutoLayoutModel 유형의 그룹을 추가합니다 autoLayoutModelsArray 2) sdlayout Subviews Handle은 auto Layout Models Array에 따라 각 자view를 옮겨다니며 각 자view의 프레임 셋을 계산합니다) sdresizeWithModel 함수에서 서브뷰의 프레임을 생성합니다. 서브프레임에 sd 가 존재하면bottomViewsArray 및 sdrightViewsArray 배열은 위의 단계를 반복적으로 수행합니다.
5. 유형 구성
  • @interface SDAutoLayoutModel : NSObject
  • 프레임 처리에 관한 일련의 Block
  • 포함
  • 에는 자신의needsAutoResizeView를 가리키는 지침도 포함되어 있다
  • @interface UIView (SDAutoHeightWidth)
  • 사용자를 위한 주요 API 호출 중 하나로 높이, 너비 적응 관련 방법,button(높음),right(넓이),UI 강제 업데이트 제약 함수
  • @interface UIView (SDLayoutExtention)
  • 원각 반경 설정, 구궁격 부동 효과, 자동 레이아웃 리셋 블록 등 관련 방법
  • @interface UIView (SDAutoLayout)
  • 설정 제약, 업데이트 제약, 비우기 제약, 부view에서 제약 제거 및 비우기,cell의 프레임 캐시 열기 등 관련 방법
  •         UIView       
  • @interface UIScrollView (SDAutoContentSize)
  • UIScrollView 콘텐츠 세로 적응, 콘텐츠 가로 적응 방법
  • UILabel (SDLabelAutoResize)
  • 텍스트 레이아웃 활성화, 단일 텍스트 label 너비 설정, label 최대 표시 줄 설정
  • @interface UIButton (SDExtention)
  • UIButton 설정 button은 단일행 문자에 따라 적응
  •         
    @interface SDAutoLayoutModelItem: NSObject@interface UIView(SDChange Frame) 최종 결과 처리 @interface SDUIView Category Manager: NSObject
    5. 주요 함수 분석
  • sd_layoutSubviews1、말뚝을 박는 안쪽을 이용하여layoutSubviews라는 함수에 sd 를 추가합니다sd_layoutSubviewsHandle
  • sd_layoutSubviewsHandle 1、if (self.sd_equalWidthSubviews.count)//2、if (self.sd_categoryManager.flowItems.count && (self.sd_categoryManager.lastWidth != self.width_sd)) view

  • 3. if(self.autoLayoutModelsArray.count)가 진정으로 프레임 계산을 하는 판단은 주로 두 단계로 나뉘는데 첫 번째 단계는 캐시 처리이고 두 번째 단계(sd resizeWithModel)는 프레임의 계산이다.
    4,if(self.tag = kSDModelCellTag & & [self isKind OfClass: NSClass FromString(@ "UItable ViewCell ContentView")]))UItableviewcell 등 높은 계산을 해결하는 것은 위의 함수가 이 문제를 완전히 해결하지 못했기 때문에 이런 판단을 추가로 넣어야 한다.그리고 UItable ViewCell Content View가 아니라 UItable ViewCell이기 때문에 UItable ViewCell에 하위 UIView를self에 넣어야 합니다.contentview가 아니라view에 있습니다. 그렇지 않으면 이 판단이 효력을 상실하여cell의 높이 계산에 실패할 수 있습니다.
    데이터 계산 결과는 보통bottom 을 사용합니다sd,height_sd 등 이 데이터를 저장하는 것은view에 존재한다.이것은 새 버전의 처리입니다. 구 버전의 데이터는 접미사가 없습니다.sd.새 버전은 구 버전의 데이터와 호환된다.주로 @interface UIView(SDChangeFrame) 완료
  • sd_resizeWithModel
  • 기능
  • 프레임의 주요 함수 계산
  • 프로세스
  • 서브뷰 가져오기
  • 자동 레이아웃이 필요하지 않으면 레이아웃을 종료
  • //오른쪽 레이아웃 전제 설정
  • (layoutWidthWithView:model:)
  • widthIs->width->width_sd 및 fixedWidth
  • widthRatioToView->ratio_width->width_sd 및 fixedWidth
  • (layoutHeightWithView:model:)
  • heightIs->height->height_sd 및 fixedHeight
  • heightRatioToView->ratio_height->height_sd 및 fixedHeight
  • (layoutLeftWithView:model:)width 재계산 필요sd
  • leftSpaceToView->left->left_sd
  • leftEqualToView->equalLeft->left_sd
  • centerXEqualToView->equalCenterX->centerX_sd
  • centerXIs->centerX->centerX_sd

  • (layoutRightWithView:model:)width 재계산 필요sd
  • rightSpaceToView->right->right_sd
  • rightEqualToView->equalRight->right_sd

  • //하단 레이아웃 사전 설정
  • (layoutTopWithView:model:) Height 재계산 필요sd
  • topSpaceToView->top->top_sd
  • topEqualToView->equalTop->top_sd
  • centerYEqualToView->equalCenterY->centerY_sd
  • centerYIs->centerY->centerY_sd

  • autoHeightRatioValue 호출layoutAutoHeightWidthView:model:
  • autoHeightRatioValue 폭 비례에 따라 높이 설정
  • 최대치와 최소치에 따라 높이 재산
  • (layoutBottomWithView:model:)heightsd
  • bottomSpaceToView->bottom->bottom_sd
  • bottomEqualToView->equalBottom->bottom_sd

  • width Equal To Height->width Equal Height 또는height Equal To Width->height Equal Width에 따라 높이와 넓이가 같다
  • sd 에 따라bottomViewsArray 및 sdrightViewsArray는 서브View의 레이아웃을 반복할지 여부를 계산하고 높이를 다시 계산합니다
  • .
  • setupCornerRadiusWithView: 모델, 필렛 설정
  • sd_cornerRadius->view.layer.cornerRadius
  • sd_cornerRadiusFromHeightRatio->view.layer.cornerRadius
  • sd_cornerRadiusFromWidthRatio->view.layer.cornerRadius



  • 좋은 웹페이지 즐겨찾기