2014-02-06 4 views
0

나는 많은 셀을 가지고 전체 화면을 덮고 있습니다. UITableView입니다. UITableView이 들어있는보기의 오른쪽 상단에 UIImage을 표시하고 싶습니다. 이 UIImage (또는 UIImageView)은 UIView에 고정되어 있습니다.이 뷰는 tableView에 속하지 않습니다 (z 순서에서는 tableView 위에 있음).이미지 주위에 UITableView 부동 (보기)

스크롤 할 때도이 이미지 주위에 UITableView을 플로트시킬 수 있습니까?

아래에 원하는 구조의 이미지가 있습니다. 상상해보십시오. 그들은 심지어 이미지 아래 에서조차 더 많은 세포라고 상상해보십시오. 이미지로 덮여있는 셀 (또는 UILabels)은 잘 리거나 줄 바꿈을해야합니다.

이것이 가능합니까? 현재 어떻게해야할지 모르겠다.

enter image description here

+1

테이블 뷰의 내용 오프셋을 사용하여 어떤 셀이 이미지에 도달했는지 결정하고 이러한 셀의 개체에 대한 제약 조건을 업데이트 할 수 있습니다. 이 UI가 훌륭한 UI라고 생각하십니까? –

+0

실제 앱에서는 당연히 질문의 이미지보다 멋지게 보입니다. 이 UI가 좋은지 나쁜지 확실하지 않습니다. 현재 나는 그렇게 나쁘지 않다. – Sebastian

+1

@MartinKoles에 동의합니다. [이것은 나쁜 생각입니다.] (https://vine.co/v/Ma0Ph7JYI1e) (사운드를 켜십시오). –

답변

0

하나의 옵션이있는 tableview의있는 ScrollView 위임 방법에 따라 사용자 정의 테이블 뷰 셀 라벨의 뒤에 공간의 제약을 조정하는 것입니다. 셀이 imageView 영역에 있는지 확인한 다음 제한 조건을 조정해야합니다. 또한 초기 레이아웃을 위해 cellForRowAtIndexPath에서 제약 조건을 조정해야합니다.

스토리

enter image description here

ViewController.m

#import "ViewController.h" 
#import "MyCell.h" 

@interface ViewController() <UITableViewDataSource, UITableViewDelegate> 

@property (weak, nonatomic) IBOutlet UITableView *tableView; 
@property (weak, nonatomic) IBOutlet UIImageView *imageView; 

@end 

@implementation ViewController 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 20; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath]; 

    // Configure the cell... 
    cell.myLabel.text = @"Lorem ipsum dolor sit amet, etc."; 

    if (indexPath.row >=3 && indexPath.row <= 5) { 

     cell.trailingSpaceConstraint.constant = 168; 
    } 

    return cell; 
} 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    NSUInteger count = 0; 

    for (MyCell *cell in [self.tableView visibleCells]) { 

     if (count >= 3 && count <= 6) { 

      cell.trailingSpaceConstraint.constant = 168.0; 
     } else { 

      cell.trailingSpaceConstraint.constant = 20.0; 
     } 
     count++; 
    } 
} 

@end 

MyCell.h

#import <UIKit/UIKit.h> 

@interface MyCell : UITableViewCell 

@property (weak, nonatomic) IBOutlet UILabel *myLabel; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *trailingSpaceConstraint; 

@end 
,174,

당신이 사용자의 ViewController를 사용하는있는 tableView 및 이미지 뷰, 후크있는 tableView의 위임 및 데이터 소스와 출구를 추가해야이 샘플에서 출력

enter image description here

. 또한 UITableViewCell (MyCell)의 사용자 정의 하위 클래스를 추가하고 셀 레이블 및 후미 공백 제한 조건의 출력을 후크해야합니다.

scrollViewDidScroll에서 행을 확인하는 것이 빠르고 빠릅니다. 아마도 더 나은 해결책은 indexPathsForRowsInRect에서 어떤 셀이 imageView rect를 만지는지 확인하는 것입니다.