如何在任何尺寸的设备上将滚动视图的内容大小设置为框架的最大宽度
How to set content size of scrollview to maximum width of frame on any size device
我在故事板中创建了一个具有任意宽度和任意高度的 UIScrollview,并且我试图将内容大小宽度设置为在其上查看的设备上的框架宽度。无论我尝试什么,宽度都被设置为故事板上显示的宽度,584,即使在 运行 它在 iPhone 6 模拟器上,它应该在 300 左右。结果在能够水平滚动的滚动视图中,这是我不想要的。通过将 UIView 添加为子视图,我确实设法让滚动视图停止水平滚动。但是,我仍然不知道如何获得正确的宽度尺寸。我不仅尝试设置内容大小宽度,而且还尝试在滚动视图中设置一个 UILabel,其宽度与 uiscrollview 的内容大小相同,但获取滚动视图的框架宽度或边界宽度以及UIView 子视图太大。如有任何帮助,我们将不胜感激。
滚动视图位于自定义 table 视图单元格内。这是单元格的 class。
import UIKit
class CustomTableViewCell: UITableViewCell, UIScrollViewDelegate {
@IBOutlet weak var winLoseValueLabel: UILabel!
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var newTotalLabel: UILabel!
@IBOutlet weak var locationLabel: UILabel!
@IBOutlet weak var playersScrollView: CustomTableCellScrollView!
@IBOutlet weak var scrollContentView: UIView!
var numLinesInScrollView : CGFloat?
var tblView : UITableView?
var people : String?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
self.playersScrollView.tblView = tblView
numLinesInScrollView = 0.0
//self.playersScrollView.contentSize.width = self.scrollContentView.frame.width
self.playersScrollView.contentSize.width = self.playersScrollView.frame.size.width
self.playersScrollView.contentSize.height = 100
//self.playersScrollView.contentSize.width = UIScreen.mainScreen().bounds.width - 24
self.playersScrollView.addSubview(self.scrollContentView)
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
func addLabelToScrollView(str : String) {
// Increment the number of lines in the scrollview
if numLinesInScrollView != nil {
numLinesInScrollView!++
}
else{
numLinesInScrollView = 1
}
// Get the bounds of the screen
let screenSize : CGRect = UIScreen.mainScreen().bounds
// Update the height of the scrollview
self.playersScrollView.contentSize.height = 20 * numLinesInScrollView!
// Add a new label to the players scroll view
let w : CGFloat = self.scrollContentView.frame.width - 350
let h : CGFloat = 20
let x : CGFloat = 0
let y : CGFloat = (numLinesInScrollView! - 1) * h
let frame : CGRect = CGRect(x: x, y: y, width: w, height: h)
var person : UILabel = UILabel(frame: frame)
person.font = UIFont(name: "HelveticaNeue-Bold", size: 12.0)
person.textColor = UIColor.blackColor()
person.textAlignment = NSTextAlignment.Center
switch numLinesInScrollView!{
case 1:
person.backgroundColor = UIColor(red: 1.0, green: 0, blue: 0, alpha: 1.0)
case 2:
person.backgroundColor = UIColor(red: 0, green: 1.0, blue: 0, alpha: 1.0)
case 3:
person.backgroundColor = UIColor(red: 0, green: 0, blue: 1.0, alpha: 1.0)
case 4:
person.backgroundColor = UIColor(red: 1.0, green: 0, blue: 1.0, alpha: 1.0)
default:
break
}
person.text? = "Hellow World"
self.scrollContentView.addSubview(person)
}
}
问题仅仅是您将 contentSize
设置得太早了。在调用 awakeFromNib
时,滚动视图(和一般界面)尚未获得其大小,因此如您所说,将 contentSize
宽度设置为滚动视图的 old 宽度 — 它在故事板中的宽度 — 因为它 仍然具有 其旧宽度。
从 awakeFromNib
中取出代码并将其放入 在 布局发生后运行的位置 — 例如,viewDidLayoutSubviews
.
我在故事板中创建了一个具有任意宽度和任意高度的 UIScrollview,并且我试图将内容大小宽度设置为在其上查看的设备上的框架宽度。无论我尝试什么,宽度都被设置为故事板上显示的宽度,584,即使在 运行 它在 iPhone 6 模拟器上,它应该在 300 左右。结果在能够水平滚动的滚动视图中,这是我不想要的。通过将 UIView 添加为子视图,我确实设法让滚动视图停止水平滚动。但是,我仍然不知道如何获得正确的宽度尺寸。我不仅尝试设置内容大小宽度,而且还尝试在滚动视图中设置一个 UILabel,其宽度与 uiscrollview 的内容大小相同,但获取滚动视图的框架宽度或边界宽度以及UIView 子视图太大。如有任何帮助,我们将不胜感激。
滚动视图位于自定义 table 视图单元格内。这是单元格的 class。
import UIKit
class CustomTableViewCell: UITableViewCell, UIScrollViewDelegate {
@IBOutlet weak var winLoseValueLabel: UILabel!
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var newTotalLabel: UILabel!
@IBOutlet weak var locationLabel: UILabel!
@IBOutlet weak var playersScrollView: CustomTableCellScrollView!
@IBOutlet weak var scrollContentView: UIView!
var numLinesInScrollView : CGFloat?
var tblView : UITableView?
var people : String?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
self.playersScrollView.tblView = tblView
numLinesInScrollView = 0.0
//self.playersScrollView.contentSize.width = self.scrollContentView.frame.width
self.playersScrollView.contentSize.width = self.playersScrollView.frame.size.width
self.playersScrollView.contentSize.height = 100
//self.playersScrollView.contentSize.width = UIScreen.mainScreen().bounds.width - 24
self.playersScrollView.addSubview(self.scrollContentView)
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
func addLabelToScrollView(str : String) {
// Increment the number of lines in the scrollview
if numLinesInScrollView != nil {
numLinesInScrollView!++
}
else{
numLinesInScrollView = 1
}
// Get the bounds of the screen
let screenSize : CGRect = UIScreen.mainScreen().bounds
// Update the height of the scrollview
self.playersScrollView.contentSize.height = 20 * numLinesInScrollView!
// Add a new label to the players scroll view
let w : CGFloat = self.scrollContentView.frame.width - 350
let h : CGFloat = 20
let x : CGFloat = 0
let y : CGFloat = (numLinesInScrollView! - 1) * h
let frame : CGRect = CGRect(x: x, y: y, width: w, height: h)
var person : UILabel = UILabel(frame: frame)
person.font = UIFont(name: "HelveticaNeue-Bold", size: 12.0)
person.textColor = UIColor.blackColor()
person.textAlignment = NSTextAlignment.Center
switch numLinesInScrollView!{
case 1:
person.backgroundColor = UIColor(red: 1.0, green: 0, blue: 0, alpha: 1.0)
case 2:
person.backgroundColor = UIColor(red: 0, green: 1.0, blue: 0, alpha: 1.0)
case 3:
person.backgroundColor = UIColor(red: 0, green: 0, blue: 1.0, alpha: 1.0)
case 4:
person.backgroundColor = UIColor(red: 1.0, green: 0, blue: 1.0, alpha: 1.0)
default:
break
}
person.text? = "Hellow World"
self.scrollContentView.addSubview(person)
}
}
问题仅仅是您将 contentSize
设置得太早了。在调用 awakeFromNib
时,滚动视图(和一般界面)尚未获得其大小,因此如您所说,将 contentSize
宽度设置为滚动视图的 old 宽度 — 它在故事板中的宽度 — 因为它 仍然具有 其旧宽度。
从 awakeFromNib
中取出代码并将其放入 在 布局发生后运行的位置 — 例如,viewDidLayoutSubviews
.