我正在使用 UITableView 的 viewForHeaderInSection 方法,但我决定 View 会更好看,单元格上的不透明度默认降低,它开始时如下所示:
我希望它像这样默认,就好像用户已经向下滚动一样(注意,我希望所有单元格都这样,而不仅仅是当前位于 View 顶部的单元格)。
我可以将 View 添加为单元格的 subview ,但我希望它保持功能,如果单元格是顶部单元格,标题 View 将保留在屏幕顶部。也许正确的方法是没有标题 View ,如果单元格是顶部单元格,则计算 View 的 origin.y 在单元格上的位置 - 尽管这似乎是一种潜在的昂贵方法,但它可能是只有/最好。
谢谢。
PSI 希望 swift 做到这一点,但 objective-c 就可以了。再次感谢
最佳答案
这是你想要的吗?
import UIKit
class ViewController: UITableViewController {
var data = [[String]]()
var headerOrigins = [CGPoint]()
var floatingHeaders = [UIView]()
override func viewDidLoad() {
super.viewDidLoad()
data = [["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eigth", "Nine", "Ten"], ["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eigth", "Nine", "Ten"], ["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eigth", "Nine", "Ten"]]
tableView.dataSource = self
tableView.delegate = self
for i in 0..<data.count {
headerOrigins += tableView(tableView, cellForRowAtIndexPath: NSIndexPath(forRow: 0, inSection: i)).frame.origin
let floatingHeader = UIView(frame: CGRectMake(0, headerOrigins[i].y, tableView.frame.size.width, 44))
floatingHeader.backgroundColor = UIColor.redColor()
floatingHeader.alpha = 0.5
let label = UILabel(frame: CGRectMake(100, 10, 100, 30))
label.text = "Header \(i)"
floatingHeader.addSubview(label)
tableView.addSubview(floatingHeader)
floatingHeaders += floatingHeader
}
}
override func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
return data.count
}
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return data[section].count
}
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel.text = data[indexPath.section][indexPath.row]
return cell
}
override func scrollViewDidScroll(scrollView: UIScrollView!) {
var tableTop = tableView.bounds.origin.y + tableView.scrollIndicatorInsets.top
if tableTop < 0 {
floatingHeaders[0].frame.origin.y = 0
} else {
for i in 0..<data.count {
if tableTop > headerOrigins[i].y {
floatingHeaders[i].frame.origin.y = tableTop
} else if tableTop < headerOrigins[i].y {
floatingHeaders[i].frame.origin.y = headerOrigins[i].y
}
var j = i
while j > 0 {
if (CGRectGetMaxY(floatingHeaders[j-1].frame) > floatingHeaders[j].frame.origin.y) {
floatingHeaders[j-1].frame.origin.y = floatingHeaders[j].frame.origin.y - floatingHeaders[j].frame.size.height
}
j--
}
}
}
}
关于UITableViewHeaderView 默认卡在单元格上方,而不是上方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24377288/
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option
我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。
我是ruby的新手,正在配置IRB。我喜欢pretty-print(需要'pp'),但总是输入pp来漂亮地打印它似乎很麻烦。我想做的是默认情况下让它漂亮地打印出来,所以如果我有一个var,比如说,'myvar',然后键入myvar,它会自动调用pretty_inspect而不是常规检查。我从哪里开始?理想情况下,我将能够向我的.irbrc文件添加一个自动调用的方法。有什么想法吗?谢谢! 最佳答案 irb中默认pretty-print对象正是hirb被迫去做。Theseposts解释hirb如何将几乎所有内容转换为ascii表。虽
我对单元测试还是比较陌生。我用Ruby编写了一个类,它接受一个文件,在该文件中搜索给定的Regex模式,替换它,然后将更改保存回文件。我希望能够为此方法编写单元测试,但我不知道我将如何去做。有人能告诉我我们如何对处理文件i/o的方法进行单元测试吗? 最佳答案 看看这个HowdoIunit-testsavingfiletothedisk?基本上这个想法是一样的,文件系统是你的类的依赖。所以引入一个可以在你的单元测试中模拟的角色/接口(interface)(这样你在单元测试时就没有依赖性);角色中的方法应该是您从文件系统中需要的所有东西
如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e