2015-03-21 3 views
4

У меня есть UITableViewController. Этот вид таблицы имеет вид заголовка. Я использую main.storyboard с автозапуском для установки моего контроллера.Как настроить высоту заголовка таблицы в swift?

В моей main.storyboard, для w: Любой h: Любой, предварительный просмотр моего контроллера просмотра установлен с размером 600x600 по умолчанию. Внутри мой заголовок имеет значение 600x200.

На мой взгляд заголовка, у меня есть ImageView установить в режим Aspect Заливка:

main.storyboard

Ограничения:

constraints

В активах, мое изображение имеет @ 2x и @ 3x.

Когда я компилирую, в тренажере я получаю для iPhone 5:

IPH5

для iPhone 6:

IPH6

для iPhone 6+:

IPH6+

  • Для iPhone 5, изображение начинается ниже строки состояния. Я не понять почему?
  • Для iPhone 6 и iPhone 6+ изображение обрезает первую ячейку моего вида таблицы. И верх изображения не регулируется в верхней части представления.

Я не знаю, как настроить высоту столаHeaderView на высоту моего изображения, потому что эта высота зависит от устройства.

Я попытался установить программно рамку заголовка, напрасно:

var frame:CGRect! 
frame.size.width = self.bgHeaderImageView.image?.size.width 
frame.size.height = self.bgHeaderImageView.image?.size.height 
self.tableView.tableHeaderView?.frame = frame 

Я получил 2 ошибки: «Значение необязательный тип CGFloat не разворачивали?»

И если я исправляю с

var frame:CGRect! 
frame.size.width = self.bgHeaderImageView.image?.size.width! 
frame.size.height = self.bgHeaderImageView.image?.size.height! 
self.tableView.tableHeaderView?.frame = frame 

Я получил 2 ошибки: "Операнд постфикса должен иметь дополнительный тип!"

Можно ли настроить размер в раскадровке напрямую, а не программно?

Я, вероятно, отсутствует что-то здесь ...

ответ

3

Я нашел решение, это не очень чистый, но это работает.

var kTableHeaderHeight:CGFloat! //expected height of the header tableview 

    var image: UIImage = UIImage(named: "my-image")! 

    var frame:CGRect!=self.tableView.tableHeaderView?.frame 
    if UIScreen.mainScreen().bounds.size.width <= 320 { //iPhone 5 and less 
     frame.size.width = 320 
     frame.size.height = 212 
    } else { //iPhone 6 @2x and iPhone 6+ @3x 
     frame.size.width = image.size.width 
     frame.size.height = image.size.height 
    } 
    self.tableView.tableHeaderView?.frame = frame 
+0

благодарит за возможность обмена! вы помогли мне с аналогичной проблемой, которую я хочу разделить на случай, если кто-то другой испытал это: вместо uiimageView в качестве фона у меня есть uisearchbar и uibuttons, а высота tableHeaderView (и tableFooterView) будет способом для больших и растягиваться на всю высоту экрана. Я не мог поверить, что в Interface Builder не было возможности исправить это, или эта ошибка возникла в первую очередь - мне это кажется ошибкой в ​​SDK и явным образом устанавливаю кадр в viewDidLoad. (iOS 8.2 & XCode 6.2 и OS X 10.9.5) – hajn

0

Попробуйте

self.edgesForExtendedLayout = UIRectEdge.None 
    self.automaticallyAdjustsScrollViewInsets = false 
    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0) 

И это тоже

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    if section == 0 
    { 
     return 1 
    } 
    else 
    { 
     return 40; // your other headers height value 
    } 
} 

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    if section == 0 
    { 
     // Note CGFloat.min for swift 
     // For Objective-c CGFLOAT_MIN 
     let headerView = UIView.init(frame: CGRectMake(0.0, 0.0, self.tableView.bounds.size.width, CGFloat.min)) 
     return headerView 
    } 
    else 
    { 
     // Construct your other headers here 
     return UIView() 
    } 
} 
1

UITableView tableHeaderView не имеет опции для соотношения сторон и использования autolayout в tableHeaderView ограничен в InterfaceBuilder. Существует множество способов достижения динамической высоты tableHeaderView. Если вы хотите иметь высоту таблицыHeaderView в зависимости от отношения изображения заголовка, вы можете использовать:

let width = UIScreen.mainScreen().bounds.size.width 
self.height = (width/640) * 209 //calculate new height 
self.tableView.tableHeaderView?.frame.size = CGSize(width: self.tableView.tableHeaderView!.frame.size.width, height: self.height) 
Смежные вопросы