我一直在困擾這個問題,我真的好奇它爲什麼會發生。我已經使用下面顯示的一個簡單示例重新創建了我的問題。我在頂部用UISearchBar在我的視圖的底部放置了一個UITableView和一個自定義的UITableViewCell(在單元的中心包含一個UILabel)。重新加載UITableView在動畫後重置幀
當鍵盤彈出時,我爲UITableView設置動畫,以更改其框架以適應UISearchBar下方和鍵盤上方的空間。現在,當我輸入任何搜索文本並重新加載UITableView時,UITableView會在動畫之前更改其框架。
開始 -
UITableView Frame: {{0, 223}, {320, 237}} - {{x, y},{width, height}}
動畫後 -
UITableView Frame: {{0, 44}, {320, 436}} - {(x, y),(width, height)}
當我輸入任何搜索文本 - UITableView Frame: {{0, 223}, {320, 237}} - {{x, y},{width, height}}
我注意到,這只是一個自定義的UITableViewCell發生。我搜索了一個答案,但沒有發現任何東西。我已經嘗試將UILabel作爲子視圖添加到自定義UITableViewCell中的contentView,但沒有奏效。所以我的問題是,我如何防止UITableView將其幀恢復爲其原始值?
編輯:這是我在動畫後更改UITableView幀的代碼。
- (void)keyboardDisplayed:(NSNotification*)notification
{
NSDictionary* keyboardInfo = [notification userInfo];
NSValue* keyboardValue = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey];
CGRect keyboardFrame = [keyboardValue CGRectValue];
CGRect frame = self.testTabl.frame;
frame.origin.y = self.testSearchBar.frame.origin.y + self.testSearchBar.frame.size.height;
frame.size.height = keyboardFrame.origin.y - frame.origin.y;
[UIView animateWithDuration:0.3 animations:^{
[self.testTabl setFrame:frame];
}];
NSLog(@"TableView Frame: %@", NSStringFromCGRect(self.testTabl.frame));
}
如果沒有看到您的代碼,很難說這些。我的第一個猜測是,你只能做動畫,並且不能將實際幀設置爲新值。 – fishinear
剛剛用我的代碼編輯我的帖子。 – akamas
如果有人遇到這個問題,我只是使用了搜索顯示控制器,而不是嘗試使用動畫。 – akamas