我的表视图有问题.当解除其顶部呈现的模态视图控制器时,它总是滚动到顶部.我已经尝试过观察contentOffset使用KVO 的变化,但是让我看到它的观点却落后于它.
从UITableViewController用户在模态对话框中完成任务时self.tableView.contentOffset,我打电话给:
[self dismissModalViewControllerAnimated:YES]
Run Code Online (Sandbox Code Playgroud)
随后,当viewWillAppear:(BOOL)animated调用时,self.tableView.contentOffset已经设置为0,0.
这应该发生吗?通过在呈现模态视图之前记住滚动位置并在解除模态视图后将其恢复到viewWillAppear中,我能够解决该问题.但这似乎是错误的.我错过了什么吗?
我发现在UIScrollView底层的Dismiss模式视图更改中描述了类似的问题.
我NSNumberFormatter用来将浮点值格式化为整数字符串,即省略小数部分.我觉得很奇怪,范围(-0.5, 0) *开放区间的数字最终为-0.由于该值将显示给用户,我认为负零不合适.我已经尝试了各种组合numberStyle和roundingMode没有成功.
有没有办法配置NSNumberFormatter输出它们0,还是我必须求助于该范围的手动校正?
我正在迁移使用NIB的旧代码来使用手动视图创建(loadView)和自动布局.根视图控制器是一个容器VC(有2个子节点),它使用自动布局,并以模态方式呈现一个视图控制器,该控制器的布局在NIB中指定,但尚未使用自动布局.一切都很好presentViewController:animated:completion:,但是当dismissViewControllerAnimated:completion:通过委托调用关闭模态视图时,呈现视图处于一个奇怪的,不可用的状态,其中内容奇怪地移动并且不会对触摸作出反应.
我试图创建最小的测试用例来重现问题,但我没能重现这个问题.
可能是什么导致了这个?
自从他们在iOS 4中推出以来,我一直想知道UIView基于块的动画方法的内部实现.特别是我想了解在那里使用Objective C的神秘特征来捕获动画块执行之前和之后的所有相关层状态变化.
观察黑盒实现,我认为它需要捕获动画块中修改的所有图层属性的前置状态,以创建所有相关的CAAnimations.我想它不会对整个视图层次结构进行快照,因为这样会非常低效.动画块在运行时是不透明的代码blob,所以我认为它不能直接分析它.它是否CALayer用某种重新编码版本取代了属性设置器的实现?或者是对这个属性的支持是否会改变在内部深处的某些内容CALayers?
为了概括一下这个问题,是否可以创建类似的基于块的API,用于使用某些Objective C暗魔法记录状态变化,或者这是否依赖于知道并且可以访问块中更改的对象的内部?
我考虑重构一些目前采用类型参数List或Set具体类参数的方法签名List[Foo]- 使用重复参数代替:Foo*.
更新:以下推理存在缺陷,请继续...
这将允许我使用相同的方法名称并根据参数类型重载它.这是不可能的使用List或者Set,因为List[Foo]和List[Bar]擦除之后具有相同类型:List[Object].
在我的情况下,重构的方法与scala.Seq[Foo]重复参数的结果一起工作正常.我将不得不更改所有调用并将序列参数类型注释添加到所有集合参数:baz.doStuffWith(foos:_*).
鉴于从集合参数切换到重复参数在语义上是等效的,这个更改是否会产生一些我应该注意的性能影响?
scala 2.7._和2.8的答案是否相同?
我已经开始欣赏Auto Layout为我所做的工作,但我与Brent Simmons讨论的主题是不使用Interface Builder来设置约束.Apple提供的界面非常灵活,但非常冗长 - 明确设计用于代码生成器而非人工使用.对我而言,它例证了最糟糕的Objective-C,重复了过长的相同前缀,很少使用参数来模糊所有含义,而不是为代码提供清晰度.我见过Florian Kugler的FLKAutoLayout隐藏了类别中的约束创建UIView.
还有其他方法可以使代码中的布局约束更清晰,更容易理解吗?
如何实现(或创建)一组元组列表的数组?
从我的代码中收集了以下内容.
基本上我创建了一个元组数组并通过for循环填充它; 之后我试着对它进行排序.
var myStringArray: (String,Int)[]? = nil
...
myStringArray += (kind,number)
...
myStringArray.sort{$0 > $1}
Run Code Online (Sandbox Code Playgroud)
这是我在构建之前给我的Xcode:
test.swift:57:9:'(String,Int)[]?' 没有名为'sort'的成员
我正在尝试实现类(实现SequenceType),它似乎比我期望的有点复杂.在C#中我只需要实现IEnumerable并且" yield return"使它变得非常简单.在python中使用__iter__()和使用相同yield.但在斯威夫特,我不知道为什么它过于复杂.这是代码
class Nums : SequenceType{
let list = [1,2,3,4,5]
func generate() -> GeneratorOf<Int?> {
return GeneratorOf<Int?>{
for i in self.list{
return i
}
return nil
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我在调用它时,for-in它进入无限循环.
如果在swift中实现可迭代类,那么正确的方法是什么?
我正在尝试编写一个函数,用于对各种SequenceType实现的迭代性能进行基准测试.它应该简单地对序列的内容求和,其中所有元素都是Ints.我正在努力表达对函数的通用约束......
func sum<S: SequenceType where S.Generator.Element: Int>(s: S) -> Int {
var sum = 0
for i in s {
sum += i
}
return sum
}
Run Code Online (Sandbox Code Playgroud)
这导致以下两个错误:
‘S.Generator.Element’约束为非协议类型’Int’'+=‘不能应用于类型’Int'和的操作数’S.Generator.Element’有没有办法定义此函数来处理任何SequenceType实现,具有专门的元素Int?
swift ×3
autolayout ×2
ios ×2
arrays ×1
cocoa ×1
generics ×1
objective-c ×1
scala ×1
scala-2.8 ×1
sorting ×1
tuples ×1
uitableview ×1
uiview ×1