2016-06-09 2 views
0

Кто-нибудь знает, как получить заголовок/нижний колонтитул пользовательского раздела из мигания при перезагрузке раздела?Как предотвратить изменение заголовка пользовательского заголовка при обновлении раздела?

Section(header:"",footer:"") {section in 
    section.tag = "main" 
    var header = HeaderFooterView<GenericSection>(HeaderFooterProvider.Class) 
    header.onSetupView = { v,s in 
     v.label.frame = CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width - 30, height: 20) 
     v.label.text = self.row.title 
     v.label.numberOfLines = 0 
     v.label.textAlignment = .Justified 
     v.label.font = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline) 
     v.label.textColor = UIColor(red:0.47, green:0.47, blue:0.49, alpha:1.0) 
     v.label.frame = v.label.bounds 
     v.label.sizeToFit() 
     v.bounds = CGRect(x: -8, y: -8, width: v.label.bounds.width - 15, height: v.label.bounds.height + 25) 
    } 
    section.header = header 
    section.footer = nil 
} 

Если я использую Section(header:"test",footer:"test2") вид заголовка никогда не мигает на любые изменения формы, которая является то, что я хочу. Тем не менее, я использую настраиваемые поля и добавление значков в заголовки, поэтому мне нужны пользовательские представления, которые служат в качестве верхнего/нижнего колонтитула. Есть ли свойство, которое я не устанавливаю в .onSetupView, который бы разрешил это?

ответ

0

ваша проблема связана с вашей header зрения перезаряжать снова и снова, и настроить его рамку снова и снова, так что вы можете исправить это просто добавить bool переменную как этот

С вопросом enter image description here

Без выпуска enter image description here

class GenericSection: UIView { 
    let label = UILabel() 
    var positioned = false 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
     label.frame = CGRect(x: 0,y: 0,width: self.bounds.size.width - 30, height: 40) 
     self.addSubview(label) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

, а затем

form +++ Section(header:"",footer:"") {section in 
      section.tag = "main" 
      var header = HeaderFooterView<GenericSection>(HeaderFooterProvider.Class) 
      header.onSetupView = { v,s in 
       if(!v.positioned) 
       { 
       v.layer.borderColor = UIColor.redColor().CGColor 
       v.layer.borderWidth = 1 
       v.label.frame = CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width - 30, height: 20) 
       v.label.text = "Testing Custom Header without issue" 
       v.label.numberOfLines = 0 
       v.label.textAlignment = .Justified 
       v.label.font = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline) 
       v.label.textColor = UIColor(red:0.47, green:0.47, blue:0.49, alpha:1.0) 
       v.label.frame = v.label.bounds 
       v.label.sizeToFit() 
       v.bounds = CGRect(x: -8, y: -8, width: v.label.bounds.width - 15, height: v.label.bounds.height + 25) 
       v.setNeedsLayout() 
       v.setNeedsDisplay() 
       v.positioned = true 
       } 
      } 
      section.header = header 
      section.footer = nil 
     } 

Надеюсь, это вам поможет, приветствует

+0

Hi. Спасибо за подробный ответ на мой вопрос! Я забыл обновить вопрос своей версией обходного пути; Я переопределил tableView viewForHeaderInSection, viewForFooterInSection и heightForHeaderInSection. Затем я могу передать свою строку и настроить ярлык в этих методах в соответствии с моими параметрами стилизации (я использую 0 вставки для разделителей, чтобы у меня были полные линии ширины между ячейками). С вашим методом не проблема, если бы это длинный раздел, что, как только я прокручу резервную копию, он не будет повторно рисовать секцию, потому что значение v.positioned будет «true»? – Plastus

+0

, но решение проблемы устраняет вашу проблему? –

+0

Да, это работает без необходимости создавать какие-либо пользовательские представления/классы. Я просто строю инициализацию раздела, такого как «section (header:« Some header », footer:« »), а затем переопределенные методы позаботятся об рендеринге. Не мигает, нет других проблем с рисованием. – Plastus