如何在网格类型视图中控制滚动

时间:2013-06-16 15:55:47

标签: ios ios6 uiscrollview xcode4.6

更新我在SubViewGrid上绘制了一个网格(UIView)。我需要能够防止最左边的列(时间)水平滚动,并且顶行(人员名称)不能垂直滚动。

数据在SubViewData中绘制,该UIScrollView位于UIScrollView内。我想我在这里需要两(2)SubViewGrid个,一个用于SubViewData,另一个用于@property (nonatomic, weak) IBOutlet UIScrollView *schedScrollView; @property (nonatomic, weak) IBOutlet UIView * topGridView; @property (nonatomic, weak) IBOutlet UIView * leftGridView; @property (nonatomic, weak) IBOutlet UIView * topLeftView; // TODO 。问题是:如何同步它们以满足用户的需求?

enter image description here

UPDATE 以下是修订后的结构:

revised image

{{1}}

1 个答案:

答案 0 :(得分:1)

请参阅this answersimilar question

我认为你需要解决这个问题,将固定标题放在数据的单独子视图中。然后在scrollViewDidScroll:中设置固定子视图的框架,以在滚动视图的顶部(或侧面)创建固定标题的外观。

例如:将标题子视图的初始帧设置为(0, 0, width, height),然后在scrollViewDidScroll:中将帧设置为(0, contentOffset.y, width, height)

编辑:以下是一个例子。在下面的屏幕截图中,我在UIScrollView内设置了顶行(人物),左列(时间)和左上角单元格(以隐藏标题的重叠)。然后在scrollViewDidScroll:中设置子视图的帧,将它们分别固定在顶部,左侧和左上角。

Grid with fixed headers
enter image description here

<强> ViewController.h:

@interface ViewController : UIViewController <UIScrollViewDelegate>

@property (nonatomic, weak) IBOutlet UIScrollView * theScrollView;
@property (nonatomic, weak) IBOutlet UIImageView * topView;
@property (nonatomic, weak) IBOutlet UIImageView * leftView;
@property (nonatomic, weak) IBOutlet UIView * topLeftView;

@end

<强> ViewController.m:

#import "ViewController.h"

@implementation ViewController

@synthesize theScrollView, topView, leftView, topLeftView;

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.theScrollView.delegate = self;
}

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.theScrollView.contentSize = CGSizeMake(502, 401);
}

#pragma mark UIScrollViewDelegate methods

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGRect tempFrame = self.topView.frame;
    tempFrame.origin.y = scrollView.contentOffset.y;
    self.topView.frame = tempFrame;

    tempFrame = self.leftView.frame;
    tempFrame.origin.x = scrollView.contentOffset.x;
    self.leftView.frame = tempFrame;

    tempFrame = self.topLeftView.frame;
    tempFrame.origin.x = scrollView.contentOffset.x;
    tempFrame.origin.y = scrollView.contentOffset.y;
    self.topLeftView.frame = tempFrame;
}

@end

这就是它的全部!希望这会对你有所帮助。