总结一些在项目中遇到的问题,记录下来方便以后使用以防遗忘,会持续的增加
- 遇到一个问题,在window上添加了一个View,使用bringSubview(toFront:)置顶也显示不出来,看图层的时候发现上面还有一个view覆盖在上面。 解决方案:使用layer的zPosition属性,设置其layer的显示层次
view.layer.zPosition = 99 // 设置一个比较大的值就OK
- 创建了一个UIView,但是无论怎么都无法响应事件,后来发现是因为在创建的时候没有确保其在主线程
DispatchQueue.main.async {
// 你的代码
}
3、使用UITextView时,进入页面时不能够滚动,但是输入文字换行后可以滚动,解决方法
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
let str = self.textView.text
let h = str.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: attributes, context:nil).size.height
self.textView.contentSize = CGSize(width: 0, height: h!+5)
return super.hitTest(point, with: event)
}
4、 最短编辑距离
fileprivate func distance(ticket:String,scan:String)->Int{
var db = Array(repeating: Array(repeating: 0, count: scan.count + 1), count: ticket.count + 1)
if ticket.count <= 0 {
return db[ticket.count][scan.count]
}
if scan.count <= 0 {
return db[ticket.count][scan.count]
}
for i in 1..<ticket.count+1 { //初始化第一列
db[i][0] = I
}
for j in 1..<scan.count+1{ //初始化第一行
db[0][j] = j
}
db[0][0] = 0
for i in 1..<ticket.count+1{
let ticketIndex = ticket.index(ticket.startIndex, offsetBy: i-1)
let ticketChars = ticket[ticketIndex]
for j in 1..<scan.count+1{
let scanIndex = scan.index(scan.startIndex, offsetBy: j-1)
let scanChars = scan[scanIndex]
if ticketChars == scanChars {
db[i][j] = db[i - 1][j - 1]
}else{
db[i][j] = min(db[i - 1][j - 1], min(db[i][j - 1], db[i - 1][j]))+1
}
}
}
return db[ticket.count][scan.count]
}
测试数据
var result = distance(ticket: "12345", scan: "12345")
print("1---\(result)")
result = distance(ticket: "12345", scan: "678")
print("2---\(result)")
result = distance(ticket: "12345", scan: "098789")
print("3---\(result)")
result = distance(ticket: "12345", scan: "zusuuuunl")
print("4---\(result)")
结果打印
image.png
5、字符串切割
let temp = "36789"
let tempIndex = temp.index(temp.startIndex, offsetBy: 1)
let tempChars = temp[tempIndex]
打印结果
“6”
6、关于gem镜像变更
https://gems.ruby-china.org 变更为https://gems.ruby-china.com
7、闰年计算规则
判断闰年规则
1)普通年能被4整除而不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年)
2) 世纪年能被400整除而不能被3200整除的为闰年。(如2000年是闰年,3200年不是闰年)
if yearValue%100 == 0 {
if (yearValue%400 == 0 ) && (yearValue%3200 != 0){
// 为闰年
}else{
// 为平年
}
}else{
if (yearValue%4 == 0) && (yearValue%100 != 0){
// 为闰年
}else{
// 为平年
}
}
9、iPhone has denied the launch request. 发现因为手欠将证书设置为始终信任
10、tableview变高刷新跳动解决方案
UIView.setAnimationsEnabled(false)
self.tableView?.beginUpdates()
// 刷新tableview
self.tableView?.endUpdates()
UIView.setAnimationsEnabled(true)
网友评论