하나의 옵션이있는 tableview의있는 ScrollView 위임 방법에 따라 사용자 정의 테이블 뷰 셀 라벨의 뒤에 공간의 제약을 조정하는 것입니다. 셀이 imageView 영역에 있는지 확인한 다음 제한 조건을 조정해야합니다. 또한 초기 레이아웃을 위해 cellForRowAtIndexPath에서 제약 조건을 조정해야합니다.
스토리
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의 위임 및 데이터 소스와 출구를 추가해야이 샘플에서 출력
. 또한 UITableViewCell (MyCell)의 사용자 정의 하위 클래스를 추가하고 셀 레이블 및 후미 공백 제한 조건의 출력을 후크해야합니다.
scrollViewDidScroll에서 행을 확인하는 것이 빠르고 빠릅니다. 아마도 더 나은 해결책은 indexPathsForRowsInRect에서 어떤 셀이 imageView rect를 만지는지 확인하는 것입니다.
테이블 뷰의 내용 오프셋을 사용하여 어떤 셀이 이미지에 도달했는지 결정하고 이러한 셀의 개체에 대한 제약 조건을 업데이트 할 수 있습니다. 이 UI가 훌륭한 UI라고 생각하십니까? –
실제 앱에서는 당연히 질문의 이미지보다 멋지게 보입니다. 이 UI가 좋은지 나쁜지 확실하지 않습니다. 현재 나는 그렇게 나쁘지 않다. – Sebastian
@MartinKoles에 동의합니다. [이것은 나쁜 생각입니다.] (https://vine.co/v/Ma0Ph7JYI1e) (사운드를 켜십시오). –