我有一个NSScrollView
,我试图填充复选框(NSButton
/ NSToggleButton
)。我添加的复选框的数量应该等于数组中的项目数。这部分正在运作。
以下代码成功地将复选框添加到滚动视图,但它们全部相互叠加。我试图添加它们,但在"列表视图中相互抵消" iOS上的tableview等方式。这是我的代码:
for calendar in self.allCalendars {
self.allCalendars.append(calendar as EKCalendar)
let checkbox = NSButton.init(checkboxWithTitle: calendar.title, target: self, action: #selector(self.checkboxDidChange))
checkbox.setButtonType(NSToggleButton)
self.checkboxArray.append(checkbox as NSButton)
self.addSubview(checkbox)
}
以下是结果的屏幕截图:
答案 0 :(得分:1)
这是你可以实现的东西,它会改变你循环的方式,以便你有一个每次迭代的索引,但它可以帮助你计算某种垂直间距:
for i in 0 ..< allCalendars.count {
let margin: CGFloat = 5.0 // Or whatever you want the padding on the left to be
let vertSpacing: CGFloat = 10.0 // However much separation you want in between boxes
self.allCalendars.append(allCalendars[i] as EKCalendar)
let checkbox = NSButton.init(checkboxWithTitle: allCalendars[i].title, target: self, action: #selector(self.checkboxDidChange))
checkbox.setButtonType(NSToggleButton)
// Now you can set the frame of the checkbox within it's superview's coordinate system
// This calculates it based on the bounds.height, if you want to use a custom height, substitute that.
checkbox.frame = CGRect(x: margin, y: vertSpacing + (vertSpacing + checkbox.bounds.height)*CGFloat(i), width: checkbox.bounds.width, height: checkbox.bounds.height)
self.checkboxArray.append(checkbox as NSButton)
self.addSubview(checkbox)
}
基本上,y值vertSpacing + (vertSpacing + checkbox.bounds.height)*CGFloat(i)
的作用是从第一个复选框开始,使用你设置垂直间距值的y-pos,然后对于之后的每个复选框,它将设置它上一个复选框下方的一个垂直空间值。该解决方案将假设每个复选框具有相同的高度。如果您不想使用bounds.height
值,可以设置自定义高度。