条形图不缩放到 BarChartView 的大小

Bar Chart not scaling to size of BarChartView

我正在使用 Daniel Gindi 的 ios-charts 库来尝试创建条形图。

我以编程方式创建了一个红色背景的 BarChartView,并用硬编码数据填充它。视图大小正确,但条形图无法正确缩放,并且在到达视图顶部时被截断。

我的观点是这样的:

此视图控制器使用故事板方法 instantiateViewControllerWithIdentifier 在滚动视图中实例化。但是,当我将此视图控制器设为初始视图控制器时,图表会正确缩放,看起来像这样:

为什么我的图表比例不正确?

我还要注意,如果我将不正确缩放的图表的 leftAxis.axisMaxValue 属性 设置为较大的值,例如 100,图表将如下所示:

我还将提供我用来创建图表的代码,减去我用来设置属性和图表数据的 30 多行代码。

override func viewDidLoad(){
    var chart : UIView?
    let gBFrame = self.graphBackground.frame
    let frame = CGRect(origin: gBFrame.origin, size: CGSize(width: gBFrame.width, height: gBFrame.height-25))
    chart = BarChartView(frame: frame)
    self.view.addSubview(chart!)
    constrainChart()
}

func constrainChart(){

    if type == "Bar Chart"{            
        chart!.translatesAutoresizingMaskIntoConstraints = false
        let leftConstraint = NSLayoutConstraint(item: self.chart!, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self.graphBackground, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 0)
        let rightConstraint = NSLayoutConstraint(item: self.chart!, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self.graphBackground, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 0)
        let topConstraint = NSLayoutConstraint(item: self.chart!, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.graphBackground, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0)
        let bottomConstraint = NSLayoutConstraint(item: self.chart!, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self.graphBackground, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: -25)
        self.view.addConstraints([leftConstraint,rightConstraint,topConstraint,bottomConstraint])
    } else if type == "Horizontal Bar Chart"{
    } else if type == "Pie Chart"{
    } else {

    }
    chart?.layoutIfNeeded()
}

如果有帮助,我可以提供任何其他信息。

对可能出现的问题有什么想法吗?或者接下来要尝试什么?

编辑:

当我在滚动视图中实例化视图控制器时,我使用 NSLayoutConstraints 对其进行定位,使其左边界距滚动视图的左边界 2*self.view.frame.width

我发现如果将该约束设置为 0,则带有图表的视图控制器会出现在滚动视图的最左侧框架中,图表会正确显示。但是,如果我完全更改该约束(例如一个单位),图表将再次不正确地缩放。

在使用上述故事板方法实例化视图控制器后,我立即使用代码如下所示的方法对其进行定位:

func setUpQuestionFrame(newViewController: UIViewController){

    var frame = newViewController.view.frame
    frame.origin.x = self.view.frame.size.width*2
    newViewController.view.frame = frame

    self.addChildViewController(newViewController)
    self.scrollView.addSubview(newViewController.view)
    newViewController.didMoveToParentViewController(self)

    newViewController.view.translatesAutoresizingMaskIntoConstraints = false

    let widthConstraintVCBAR = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: newViewController.view, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 0)
    view.addConstraint(widthConstraintVCBAR)

    let heightConstraintVCBAR = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: newViewController.view, attribute: NSLayoutAttribute.Height, multiplier: 1, constant: 0)
    view.addConstraint(heightConstraintVCBAR)

    let horizontalConstraintVCBAR = NSLayoutConstraint(item: newViewController.view, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 5)//self.view.frame.width*2)
    view.addConstraint(horizontalConstraintVCBAR)

    let verticalConstraintVCBAR = NSLayoutConstraint(item:  newViewController.view, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0)
    view.addConstraint(verticalConstraintVCBAR)
}

问题已通过添加 chart!.notifyDataSetChanged() 解决,它告诉图表在收到新数据后重新配置。

这与 问题中使用的解决方案相同。