Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift iOS图表折线图缺少最后一个轴标签_Swift_Charts_Ios Charts - Fatal编程技术网

Swift iOS图表折线图缺少最后一个轴标签

Swift iOS图表折线图缺少最后一个轴标签,swift,charts,ios-charts,Swift,Charts,Ios Charts,我用iOS图表盒创建了一个折线图 首先,我有一个名为TestBalance的自定义对象数组,其中包含一个日期字符串(转换为日期)和一个金额(Double)。目前,我已经创建了这样一个硬编码数组 let balanceTestArray : [TestBalance] = [TestBalance(dateString: "01/01/2019", amount: 1920.24), //More elements... , TestBalance(dateString: "28/01/2019"

我用iOS图表盒创建了一个折线图

首先,我有一个名为TestBalance的自定义对象数组,其中包含一个日期字符串(转换为日期)和一个金额(Double)。目前,我已经创建了这样一个硬编码数组

let balanceTestArray : [TestBalance] = [TestBalance(dateString: "01/01/2019", amount: 1920.24), //More elements... , TestBalance(dateString: "28/01/2019", amount: 844.24)]
然后,我继续为图形数据创建ChartDataEntry数组

let now = Date().timeIntervalSince1970
let dayInterval: TimeInterval = 3600 * 24

guard let firstDate = balanceTestArray.first else {return}
guard let lastDate = balanceTestArray.last else {return}
guard let firstDateDateValue = firstDate.date else {
  print("No Date")
  return
}
guard let lastDateDateValue = lastDate.date else {
  print("No Date")
  return
}

let from = firstDateDateValue.timeIntervalSince1970
let to = lastDateDateValue.timeIntervalSince1970 + dayInterval
var counter = 0
let values = stride(from: from, to: to, by: dayInterval).map { (x) -> ChartDataEntry in
  let y = balanceTestArray[counter].amount
  counter += 1
  return ChartDataEntry(x: x, y: Double(y))
}
上面的代码似乎工作得很好,像这样绘制所有的点和轴标签

我已按以下方式设置xAxis:

let xAxis = lineChartView.xAxis
xAxis.labelPosition = .bottom
xAxis.labelFont = UIFont(name: "Montserrat-Regular", size: 10)!
xAxis.labelTextColor = UIColor(hex: "#A2A2A2FF")!
xAxis.drawAxisLineEnabled = false
xAxis.drawGridLinesEnabled = false
xAxis.granularity = 1.0
xAxis.centerAxisLabelsEnabled = false
xAxis.avoidFirstLastClippingEnabled = true

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE dd"

let xValuesNumberFormatter = ChartXAxisFormatter()
xValuesNumberFormatter.dateFormatter = dateFormatter
xAxis.valueFormatter = xValuesNumberFormatter
这就是我的两个主要问题开始显现的地方

  • 第一个问题是轴的标签与数据不匹配,我觉得间距不合适?这是一张放大到数据开头的图片。如何固定间距以最大化数据?我不希望每个值都有超过1天的标签,而放大时有2天的标签。有什么解决办法吗
  • 第二个问题是,在图表的右侧是最后一个日期,在这种情况下,1月28日不是显示为标签,而是显示数据?如何使标签显示

  • 你不需要为每一件你正在检查的东西都有一份单独的守卫声明。你可以做
    guard let unwrappedThingOne=optionalThing,let unwrappedThingTwo=optionalThingTwo还有一件事{.return}
    Swift内置了一些日期计算功能,这样你就不用****计算秒数了。您可以这样声明当前日期:
    let now=date()。然后您可以创建新日期,如下所示: