填坑記(UI)

1. tableView刷新閃屏

場景:類似于聊天界面界弧,快速多次發(fā)送消息临梗,刷新界面并且滾動到最后一條
問題scrollToRowAtIndexPath:滾動到最后時,會再次出現(xiàn)從上往下滾動的現(xiàn)象
原因:在tableview滾動到最后一條前痊银,還未得出cellheight,就已經開始新的reloadData
解決
tableView.estimatedRowHeight = 0
參考鏈接
http://www.reibang.com/p/ef815c336ded

2. 打開webView的同時 輸入框 獲取焦點并彈出鍵盤

問題:h5頁面已設置頁面中input獲取焦點谣妻,安卓端展示正常鳞滨,但是iOS不能顯示光標和鍵盤???????
原因:在WebView中, 默認是需要用戶操作行為才能打開鍵盤累盗,若需要打開頁面的同時輸入框獲取焦點并彈出鍵盤寒矿,需要設置keyboardDisplayRequiresUserAction屬性告知webView
解決

2.1 UIWebView
        webView.keyboardDisplayRequiresUserAction = NO;
2.1 WKWebView

OC 語言:

@implementation WKWebView (Keyboard)

static void (*originalIMP)(id self, SEL _cmd, void* arg0, BOOL arg1, BOOL arg2, id arg3) = NULL;

void interceptIMP (id self, SEL _cmd, void* arg0, BOOL arg1, BOOL arg2, id arg3) {
    originalIMP(self, _cmd, arg0, TRUE, arg2, arg3);
}

//該函數(shù)只能調用一次突琳,否則會導致循環(huán)調用若债,程序崩潰
+ (void)wkWebViewShowKeybord{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Class cls = NSClassFromString(@"WKContentView");
        SEL originalSelector = NSSelectorFromString(@"_startAssistingNode:userIsInteracting:blurPreviousNode:userObject:");
        Method originalMethod = class_getInstanceMethod(cls, originalSelector);
        IMP impOvverride = (IMP) interceptIMP;
        originalIMP = (void *)method_getImplementation(originalMethod);
        method_setImplementation(originalMethod, impOvverride);
    });
}

@end

swift語言(extension中添加屬性):

import WebKit

typealias ClosureType =  @convention(c) (Any, Selector, UnsafeRawPointer, Bool, Bool, Any) -> Void

extension WKWebView{
    var keyboardDisplayRequiresUserAction: Bool {
        get {
            return true
        } set {
            if newValue == false {
                setKeyboardRequiresUserInteraction()
            }
        }
    }
    
    func setKeyboardRequiresUserInteraction() {
        let sel: Selector = sel_getUid("_startAssistingNode:userIsInteracting:blurPreviousNode:userObject:")
        let WKContentView: AnyClass = NSClassFromString("WKContentView")!
        let method = class_getInstanceMethod(WKContentView, sel)
        let originalImp: IMP = method_getImplementation(method!)
        let original: ClosureType = unsafeBitCast(originalImp, to: ClosureType.self)
        let block : @convention(block) (Any, UnsafeRawPointer, Bool, Bool, Any) -> Void = {(me, arg0, arg1, arg2, arg3) in
            original(me, sel, arg0, true, arg2, arg3)
        }
        let imp: IMP = imp_implementationWithBlock(block)
        method_setImplementation(method!, imp)
    }
}

參考鏈接https://blog.csdn.net/longshihua/article/details/78001336

3. UIAlertController在pad上崩潰

問題UIAlertControllerpreferredStyleactionSheet時在pad上crash,iphone上正常
原因:在iPad下ActionSheet將以popover的形式展現(xiàn)出來
解決:設置sourceViewsourceRect屬性

alertVC.popoverPresentationController?.sourceView = view
let sourceRect = CGRect.init(x: view.width / 2.0, y: view.height, width: 1, height: 1)
alertVC.popoverPresentationController?.sourceRect = sourceRect
4. 撥打電話openUrl

問題:調用撥打電話的方法openUrl,在iOS10以上出現(xiàn)卡頓拆融,或阻塞其他彈窗的正常消失/出現(xiàn)
原因:在iOS10以上openUrl被deprecated蠢琳,調用時卡了主線程
解決:區(qū)分iOS系統(tǒng),10以上和以下調用不同的方法

// 撥打電話
    public class func callTelephone(phoneNum : String) -> Bool {
        let urlStr = "telprompt://\(phoneNum)"
        guard let url = URL.init(string: urlStr), UIApplication.shared.canOpenURL(url) else {
            return false
        }
        if #available(iOS 10.0, *) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(url)
        }
        return true
    }
5. interactivePopGestureRecognizer 頁面卡死或無響應

問題:在navigationController管理的第一個主頁面PageA镜豹,使用“邊緣手勢-從左側向右滑動”傲须,點擊通過push進入下一頁面PageB,頁面卡死
原因
解決:關閉主頁面PageA的邊緣手勢
1)設置邊緣手勢是否開啟-當是主頁面時趟脂,關閉邊緣手勢

//設置泰讽,返回手勢是否可用
    func setGestureEnable(enable: Bool) {
        guard let navi = navigationController else { return }
        if navi.viewControllers.count >= 2, enable {
            navi.interactivePopGestureRecognizer?.isEnabled = true
            navi.interactivePopGestureRecognizer?.delegate = self
        } else {
            navi.interactivePopGestureRecognizer?.isEnabled = false
            navi.interactivePopGestureRecognizer?.delegate = nil
        }
    }

2)實現(xiàn)代理方法

extension UIViewController: UIGestureRecognizerDelegate {
    public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
}

3)調用方法 - 在viewDidAppear方法中調用

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        setGestureEnable(enable: true)
    }

注:不能在viewWillAppear中調用,否則在跳轉到PageB頁面后昔期,使用手勢側滑返回時已卸,頁面會卡死

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市硼一,隨后出現(xiàn)的幾起案子累澡,更是在濱河造成了極大的恐慌,老刑警劉巖般贼,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愧哟,死亡現(xiàn)場離奇詭異奥吩,居然都是意外死亡,警方通過查閱死者的電腦和手機蕊梧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門霞赫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人望几,你說我怎么就攤上這事绩脆。” “怎么了橄抹?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵靴迫,是天一觀的道長。 經常有香客問我楼誓,道長玉锌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任疟羹,我火速辦了婚禮主守,結果婚禮上,老公的妹妹穿的比我還像新娘榄融。我一直安慰自己参淫,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布愧杯。 她就那樣靜靜地躺著涎才,像睡著了一般。 火紅的嫁衣襯著肌膚如雪力九。 梳的紋絲不亂的頭發(fā)上耍铜,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音跌前,去河邊找鬼棕兼。 笑死,一個胖子當著我的面吹牛抵乓,可吹牛的內容都是我干的伴挚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼灾炭,長吁一口氣:“原來是場噩夢啊……” “哼茎芋!你這毒婦竟也來了?” 一聲冷哼從身側響起咆贬,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤败徊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掏缎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體皱蹦,經...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡煤杀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沪哺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沈自。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辜妓,靈堂內的尸體忽然破棺而出枯途,到底是詐尸還是另有隱情,我是刑警寧澤籍滴,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布酪夷,位于F島的核電站,受9級特大地震影響孽惰,放射性物質發(fā)生泄漏晚岭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一勋功、第九天 我趴在偏房一處隱蔽的房頂上張望坦报。 院中可真熱鬧,春花似錦狂鞋、人聲如沸片择。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽字管。三九已至,卻和暖如春疏咐,著一層夾襖步出監(jiān)牢的瞬間纤掸,已是汗流浹背脐供。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工浑塞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人政己。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓酌壕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親歇由。 傳聞我的和親對象是個殘疾皇子卵牍,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內容

  • 生活就是一本讓我們不斷記錄的書糊昙,學習寫作,其實就是將自己日常的所見所聞谢谦,感悟變成文字的敘述释牺,寫作經常會遇到兩個問題...
    風的聲音閱讀 216評論 0 1
  • 記憶中的夏天 是像你一樣恬靜 樹蔭的溫柔 書頁沙沙作響 陽光吻過你的白襯衫 臉頰粉紅 一陣微風 睡夢中你舒服地彎了...
    子兮子兮耶閱讀 226評論 0 0
  • 在我們醫(yī)院的病房里萝衩,醫(yī)生和護士人物最怕的人物非屬李老太。 李老太不是病號没咙,但比病號更難伺候猩谊。 老太的丈夫王老頭得的...
    夜闌臥雨閱讀 243評論 4 5