【问题标题】:Custom UIView in UIScrollView drawRect never calledUIScrollView drawRect 中的自定义 UIView 从未调用过
【发布时间】:2013-07-14 09:24:32
【问题描述】:

我有一个控制器:

- (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");
}

为什么?

【问题讨论】:

标签: ios uiview uiscrollview drawrect


【解决方案1】:
-(void) setNeedsDisplay {
    [self.subviews makeObjectsPerformSelector:@selector(setNeedsDisplay)];
    [super setNeedsDisplay];
}

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

【讨论】:

    【解决方案2】:

    在以编程方式添加它之前,从 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)
        }
    

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      相关资源
      最近更新 更多