我已经尝试了其他地方可以找到的所有内容,并且我也尝试了下面可以看到的代码的每个排列,我只是无法解决这个问题。
情节本身效果很好,那里没有问题。我的应用程序中有一个屏幕,我想在此视图上绘制一个OxyPlot,但旋转90度以更好地适应数据(由于各种原因,应用程序当前锁定为肖像)。
视图中的代码是:
private void CreatePlotChart()
{
var normalRect = new CGRect(0,0, View.Frame.Width, View.Frame.Height);
var rotatedRect = new CGRect(0, 0, View.Frame.Height, View.Frame.Width); // height and width swapped
var plot = new PlotView();
var radians = -90d.ToRadians();
plot.Transform = CGAffineTransform.MakeRotation((nfloat)radians);
// plot.Frame = normalRect;
plot.Model = ViewModel.Model;
// plot.InvalidatePlot(true); // no discernable effect
Add(plot);
// plot.Draw(rotatedRect); // context error
View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
View.AddConstraints(
plot.AtTopOf(View),
plot.AtLeftOf(View),
plot.WithSameHeight(View),
plot.WithSameWidth(View),
plot.AtBottomOf(View)
);
}
上面的代码会产生如下所示的图表,如果我将rotatedRect
传递给构造函数new PlotView(rotatedRect)
,我也会得到完全相同的图表:
如果我删除约束的使用并传递rotatedRect
,就像这样:
private void CreatePlotChart()
{
var normalRect = new CGRect(0,0, View.Frame.Width, View.Frame.Height);
var rotatedRect = new CGRect(0, 0, View.Frame.Height, View.Frame.Width); // height and width swapped
var plot = new PlotView(rotatedRect);
var radians = -90d.ToRadians();
plot.Transform = CGAffineTransform.MakeRotation((nfloat)radians);
// plot.Frame = normalRect;
plot.Model = ViewModel.Model;
// plot.InvalidatePlot(true); // no discernable effect
Add(plot);
// plot.Draw(rotatedRect); // context error
// View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
//View.AddConstraints(
// plot.AtTopOf(View),
// plot.AtLeftOf(View),
// plot.WithSameHeight(View),
// plot.WithSameWidth(View),
// plot.AtBottomOf(View)
// );
}
我更接近期望的效果,如下所示:
如果我再迈出一步并将其“重置”到缓存的normalRect
框架,我会更加接近:
所有这些尝试都让人觉得太过苛刻。实现我需要的图表操作的最佳方法是什么,并保持使用约束以确保正确定位?
更新
如果在绘制第一个图表并开始另一个数据选择之后,完全相同的代码会完全正确地呈现图表:
这也是100%可重复的,所以我认为这可能是OxyPlot中的一个错误,或者是我使用它的方式的一些奇怪的副作用。