2017-10-25 10 views
1

enter image description here 저는 이전에 Android 용으로 만든 응용 프로그램의 iOS 버전을 만들고자합니다. Android 버전에서는 LinearLayout을 사용하여 필요한 추가 레이아웃 (사용자가 대화 상자를 통해 특정 페이지에 추가 한 데이터를 표시하기위한 RecyclerView 중 하나만 포함)을 넣을 수있었습니다. 나는 지금 iOS에서 이것을 약간의 어려움으로 복제하려하고있다.iOS 2 개의 고정 섹션과 동적 테이블 뷰를 사용하여 레이아웃을 수행하는 방법은 무엇입니까?

지금까지 시도한 것들 : 스크롤보기> 스택보기> 스택보기 내에서 사용자가 추가 한 데이터를 보여주는 동적 테이블보기 - 지금까지 모든 시도가 실패했습니다. 마치 Xcode가 지옥 그것은 내가 그것을 요구하고있는 것 대신에 원한다. 무작위로 배정 된 높이와 너비는 5 자리 숫자가 흔합니다. 콘텐츠를 표시 할 수는 있지만 일직선으로 스크롤하는 것을 거부합니다. 스크롤 뷰 위쪽, 아래쪽을 슈퍼 뷰로 설정하고 내가 본 많은 자습서가 저에게 지시하도록 했으므로 스택 뷰에는 스크롤 뷰와 동일한 너비에 대한 제약 조건이 있지만 아직 아무것도 없습니다. .

정적 테이블보기> 동적 셀보기 중 하나에서 동적 테이블보기 - 여기서 문제는 동적 테이블을 스크롤 할 수 없도록하려는 것입니다.이 필드에있는 모든 콘텐츠의 높이가되도록하고 싶습니다. 아무 콘텐츠가 없다 기본적으로 존재하지 않기를 원한다면 1 행을 표시하고 3 행이 있으면 외부 테이블보기에서 별도의 스크롤 작업없이 3 행을 모두 표시 할 수 있습니다. .

기본적으로 UI 요소 (이상적으로 정적 테이블 뷰 또는 여기에 표시 할 수있는 뷰의 종류)가있는 긴 스크롤 가능한 화면 뒤에 있습니다. 동적 위아래 모두 테이블 뷰 및 동적 테이블 뷰의 길이는 정확히 추가 된 내용에 맞습니다. 이 같은 것을 iOS에서 전혀 할 수 있습니까?

편집 : 에뮬레이트하려고하는 Android 측 UI의 첨부 그림을 찾아보세요. RecyclerView는 타사 세부 정보 단추와 세 개의 카메라 단추 사이에 있습니다. 제안 설명에서와 같이

+0

UI 사진을 넣을 수 있습니까? – fidetro

+0

에뮬레이트하려고하는 Android 측의 그림이 추가되었습니다. iOS 측에서 보여줄만한 스크린 샷이 아직 없기 때문에 인터페이스 작성기는 현재 사용자가 보여 주거나 현재 컴파일 가능한 상태가 아닌 모든 것을 숨 깁니다. – markeh21

답변

0

어쩌면 당신은, jQuery과 사용해야합니다

func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return textViewCount + isCamera == true ? 1:0// 
} 


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    if indexPath.row == cameraRow { 
     return cameraCell //suggest addSubview UICollectionView do this 
    }else{ 
     return textViewCell 
    } 
} 

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.row == cameraRow { 
     return cameraCount/3 * cameraHeight 
    }else{ 
     return textViewHeight 
    } 
} 

을 목표 - C에서, 나는이 문자열의 크기를 계산 사용

@implementation NSString (FIDExtra) 

- (CGSize)sizeWithTextMaxSize:(CGSize)textMaxSize font:(UIFont *)font 
{ 
    CGSize textSize = CGSizeZero; 

    if (self.length > 0) 
    { 
     NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
     paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 

     NSDictionary *attributesDic = @{NSFontAttributeName: font, 
             NSParagraphStyleAttributeName: paragraphStyle}; 

     CGRect textRect = [self boundingRectWithSize:textMaxSize 
              options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading 
              attributes:attributesDic 
              context:nil]; 

     textSize = CGSizeMake(CGRectGetWidth(textRect), ceilf(CGRectGetHeight(textRect))); 
    } 

    return textSize; 
} 

@end 

내가 신속한 사용하려고를 하지만 유용하지는 않습니다.

extension String { 
    func sizeWithTextMaxSize(textMaxSize:CGSize,font:UIFont) -> CGSize { 
     var textSize = CGSize.zero 
     if self.count > 0 { 
      let paragraphStyle = NSMutableParagraphStyle() 
      paragraphStyle.lineBreakMode = .byWordWrapping 
      let attri = NSAttributedString.init(string: self, attributes: [NSAttributedStringKey.font:font]) 
      let textRect = attri.boundingRect(with: textSize, options: [.usesLineFragmentOrigin,.usesFontLeading], context: nil) 
      textSize = CGSize.init(width: textRect.size.width, height: textRect.size.height) 
     } 
     return textSize 
    } 
} 
+0

감사합니다.이 방법이 유용 할 것이지만, 제가 찾고있는 부분은 카메라 버튼 위에있는 것입니다. 아마도 collectionview를 사용하여이 작업을 수행 할 것입니다. 이미 다른 곳의 응용 프로그램에서 사용하고 있습니다. – markeh21

+0

'선택적 공용 함수 tableView (_ tableView : UITableView, heightForHeaderInSection 섹션 : Int) -> CGFloat'을 사용하여 문자열의 크기를 계산하십시오 – fidetro