iOS展开sheet查看,sheet旋转时剪切
iOS SpreadsheetView, sheet cut when rotated
我有这个问题。我需要像这张截图中那样旋转 sheet。
所以我用
旋转了 UIView(subclassed in SpreadsheetView
class)
spreadsheetView.transform = CGAffineTransform(rotationAngle: CGFloat.pi/2)
并做到了 @IBDesignable
,这就是我在故事板中也旋转视图的原因。
但是当应用程序启动时,我得到了这个结果:
如您所见,数据已被裁剪,并且从未旋转的视图的蓝色边框开始裁剪(请参见第一张图片,突出显示的矩形)。
如何按照我需要的方向调整视图从头到尾的数据?
我使用的库是 SpreadsheetView,这是我的 class:
import UIKit
import SpreadsheetView
class TableChartViewController: UIViewController, SpreadsheetViewDataSource {
var headerString = ["Luogo", "Attività", "Umore", "Tot.", "Alta", "Media", "Bassa"]
var data = [[String]]()
@IBOutlet weak var spreadSheetView: SpreadsheetView!
override func viewDidLoad() {
super.viewDidLoad()
spreadSheetView.dataSource = self
spreadsheetView.transform = CGAffineTransform(rotationAngle: CGFloat.pi/2)
spreadSheetView.register(HeaderCell.self, forCellWithReuseIdentifier: String(describing: HeaderCell.self))
spreadSheetView.register(TextCell.self, forCellWithReuseIdentifier: String(describing: TextCell.self))
}
//sorting funcs
enum Sorting {
case ascending
case descending
var symbol: String {
switch self {
case .ascending:
return "\u{25B2}" //unicode for black up-pointing triangle
case .descending:
return "\u{25BC}" //unicode for black down-pointing triangle
}
}
}
var sortedColumn = (column: 0, sorting: Sorting.ascending)
//spreadSheetView funcs
func numberOfColumns(in spreadsheetView: SpreadsheetView) -> Int {
return headerString.count
}
func numberOfRows(in spreadsheetView: SpreadsheetView) -> Int {
return 5
}
func spreadsheetView(_ spreadsheetView: SpreadsheetView, widthForColumn column: Int) -> CGFloat {
return 80
}
func spreadsheetView(_ spreadsheetView: SpreadsheetView, heightForRow row: Int) -> CGFloat {
return 40
}
func spreadsheetView(_ spreadsheetView: SpreadsheetView, cellForItemAt indexPath: IndexPath) -> Cell? {
if case 0 = indexPath.row {
let cell = spreadsheetView.dequeueReusableCell(withReuseIdentifier: String(describing: HeaderCell.self), for: indexPath) as! HeaderCell
cell.label.text = headerString[indexPath.column]
if case indexPath.column = sortedColumn.column {
cell.sortArrow.text = sortedColumn.sorting.symbol
} else {
cell.sortArrow.text = ""
}
cell.setNeedsLayout()
return cell
} else {
let cell = spreadsheetView.dequeueReusableCell(withReuseIdentifier: String(describing: TextCell.self), for: indexPath) as! TextCell
cell.label.text = "Prova"
return cell
}
}
}
我找到了一个解决方案,不知道为什么但它有效!
只需将 SpreadsheetView
放入另一个默认 class 的 UIView
并旋转 仅 这个。
显然,请确保 SpreadsheetView
的尺寸与 UIView
相匹配,仅此而已。
我有这个问题。我需要像这张截图中那样旋转 sheet。
所以我用
旋转了 UIView(subclassed inSpreadsheetView
class)
spreadsheetView.transform = CGAffineTransform(rotationAngle: CGFloat.pi/2)
并做到了 @IBDesignable
,这就是我在故事板中也旋转视图的原因。
但是当应用程序启动时,我得到了这个结果:
如您所见,数据已被裁剪,并且从未旋转的视图的蓝色边框开始裁剪(请参见第一张图片,突出显示的矩形)。 如何按照我需要的方向调整视图从头到尾的数据?
我使用的库是 SpreadsheetView,这是我的 class:
import UIKit
import SpreadsheetView
class TableChartViewController: UIViewController, SpreadsheetViewDataSource {
var headerString = ["Luogo", "Attività", "Umore", "Tot.", "Alta", "Media", "Bassa"]
var data = [[String]]()
@IBOutlet weak var spreadSheetView: SpreadsheetView!
override func viewDidLoad() {
super.viewDidLoad()
spreadSheetView.dataSource = self
spreadsheetView.transform = CGAffineTransform(rotationAngle: CGFloat.pi/2)
spreadSheetView.register(HeaderCell.self, forCellWithReuseIdentifier: String(describing: HeaderCell.self))
spreadSheetView.register(TextCell.self, forCellWithReuseIdentifier: String(describing: TextCell.self))
}
//sorting funcs
enum Sorting {
case ascending
case descending
var symbol: String {
switch self {
case .ascending:
return "\u{25B2}" //unicode for black up-pointing triangle
case .descending:
return "\u{25BC}" //unicode for black down-pointing triangle
}
}
}
var sortedColumn = (column: 0, sorting: Sorting.ascending)
//spreadSheetView funcs
func numberOfColumns(in spreadsheetView: SpreadsheetView) -> Int {
return headerString.count
}
func numberOfRows(in spreadsheetView: SpreadsheetView) -> Int {
return 5
}
func spreadsheetView(_ spreadsheetView: SpreadsheetView, widthForColumn column: Int) -> CGFloat {
return 80
}
func spreadsheetView(_ spreadsheetView: SpreadsheetView, heightForRow row: Int) -> CGFloat {
return 40
}
func spreadsheetView(_ spreadsheetView: SpreadsheetView, cellForItemAt indexPath: IndexPath) -> Cell? {
if case 0 = indexPath.row {
let cell = spreadsheetView.dequeueReusableCell(withReuseIdentifier: String(describing: HeaderCell.self), for: indexPath) as! HeaderCell
cell.label.text = headerString[indexPath.column]
if case indexPath.column = sortedColumn.column {
cell.sortArrow.text = sortedColumn.sorting.symbol
} else {
cell.sortArrow.text = ""
}
cell.setNeedsLayout()
return cell
} else {
let cell = spreadsheetView.dequeueReusableCell(withReuseIdentifier: String(describing: TextCell.self), for: indexPath) as! TextCell
cell.label.text = "Prova"
return cell
}
}
}
我找到了一个解决方案,不知道为什么但它有效!
只需将 SpreadsheetView
放入另一个默认 class 的 UIView
并旋转 仅 这个。
显然,请确保 SpreadsheetView
的尺寸与 UIView
相匹配,仅此而已。