UIScrollView中的自定义UIView从未调用过drawRect

时间:2013-07-16 09:11:49

标签: ios uiview uiscrollview drawrect

我有一个控制器:

- (void)viewDidLoad {
   [super viewDidLoad];

   // Add a scroolView
   self.scroolViewDay.scrollEnabled = YES;
   // Compute the content Size of the TableDays
   self.scroolViewDay.contentSize = CGSizeMake(self.scroolViewDay.frame.size.width, 
                                               80 * 48); // TO MODIFY!
   [self.scroolViewDay addSubview:self.tableDays];
   [self.tableDays setNeedsDisplay];
}

控制器有XIB所在的UIScrollView。 自定义视图 TableDays 具有永远不会调用的自定义drawRect

- (void)drawRect:(CGRect)rect {
    NSLog(@"sono in drawRect");
}

为什么?

2 个答案:

答案 0 :(得分:1)

-(void) setNeedsDisplay {
    [self.subviews makeObjectsPerformSelector:@selector(setNeedsDisplay)];
    [super setNeedsDisplay];
}

添加此代码,并在主视图中覆盖setNeedsDisplay方法,我希望您知道应重新绘制所有子视图。

答案 1 :(得分:0)

在以编程方式添加它之前,请使用正确的约束从storyboard添加它,并查看它是否被调用。 就我而言,我添加到此自定义视图的约束存在问题。

这是有问题的代码,

    let header = HeaderBackgroundView(frame: view.bounds)
    scrollView.addSubview(header)

    header.snp.makeConstraints { make in
      make.leading.equalTo(scrollView.snp.leading)
      make.trailing.equalTo(scrollView.snp.trailing)
      make.top.equalTo(scrollView.snp.top)
      make.height.equalTo(200)
    }

我通过添加中心x约束对其进行了修复:

    header.snp.makeConstraints { make in
      make.leading.equalTo(scrollView.snp.leading)
      make.trailing.equalTo(scrollView.snp.trailing)
      make.top.equalTo(scrollView.snp.top)
      make.centerX.equalTo(scrollView.snp.centerX) // this line.
      make.height.equalTo(200)
    }