此代码使用EasyPeasy库创建我的自定义视图

override func viewDidLoad() {
        super.viewDidLoad()
    chart = Init( ChartView(frame: .zero, with: calc)) {) {
                        $0.translatesAutoresizingMaskIntoConstraints = false

                }
                view.addSubview(chart)
                chart <- [
                    Top(0).to(self.topLayoutGuide),
                    Bottom(0),
                    Left(0),
                    Right(0)
                ]

                chart.layoutIfNeeded()

}


但是,如果我旋转设备,则不会重新加载自定义视图:只是缩放比例不正确(例如,圆圈变成了椭圆形)。但是,如果我使用chart.layoutIfNeeded()手动重绘,效果很好。
有什么办法说:“亲爱的设备,每当我更改框架/旋转视图时,重新绘制自定义视图”?
附言EasyPeasy使用NSLayoutConstraint
https://github.com/nakiostudio/EasyPeasy

最佳答案

我发现这解决了我的问题:

chart = Init( ChartView(frame: .zero, with: calc)) {
                    $0.translatesAutoresizingMaskIntoConstraints = false
                    $0.contentMode = .redraw
            }


我的意思是视图需要此方法:setNeedsDisplay()。要由OS自动执行此操作,需要设置chart.contentMode = .redraw

关于ios - 如果设备旋转,则EasyPeasy(NSLayoutConstraint)不会更改自定义 View 框架,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39958999/

10-13 04:28