Платформа iOS XLPagerTabStrip не работает должным образом

Я использую XLPagerTabStrip для получения TabBar с поведением типа ViewPager, например Android. Я настроил в соответствии с их руководством по документации репозитория github, но в моем случае он имеет специфическое поведение на моем симуляторе iPhone11 Pro max и реальном устройстве iPhone 6+. Панель вкладок немного прокручивается при выборе последней вкладки, хотя в прокрутке нет необходимости. А в iPhone 6 он показывает полноэкранный режим для одной вкладки. Прилагаю код и скриншот. Любая помощь ценна. Заранее спасибо Вот мой код

class TalkRoomPagerViewController: BaseButtonBarPagerTabStripViewController<PagerTabCell>, StoryboardBased, ViewModelBased {

    var viewModel: TalkRoomPagerViewModel!
    private let bag = DisposeBag()

    private var allTalkRoom: TalkRoomListViewController {
        let viewModel = TalkRoomListViewModel(type: .all,
                                              filteredTalkroomWithPreferenceLists: self.viewModel.allTalkRoomWithPreferenceLists,
                                              requestPreferenceUpdate: self.viewModel.requestPreferenceUpdate,
                                              pagerTabIndex: self.viewModel.pagerTabIndexSubject.asObserver())
        let services = TalkroomListServices(chatRoomNetwork: ChatRoomNetwork())
        let viewController = TalkRoomListViewController.instantiate(withViewModel: viewModel, andServices: services)
        return viewController
    }
    private var siteTalkRoom: TalkRoomListViewController {
        let viewModel = TalkRoomListViewModel(type: .site,
                                              filteredTalkroomWithPreferenceLists: self.viewModel.siteTalkRoomWithPreferenceLists,
                                              requestPreferenceUpdate: self.viewModel.requestPreferenceUpdate)
        let services = TalkroomListServices(chatRoomNetwork: ChatRoomNetwork())
        let viewController = TalkRoomListViewController.instantiate(withViewModel: viewModel, andServices: services)
        return viewController
    }
    private var companyTalkRoom: TalkRoomListViewController {
        let viewModel = TalkRoomListViewModel(type: .company,
                                              filteredTalkroomWithPreferenceLists: self.viewModel.companyTalkRoomWithPreferenceLists,
                                              requestPreferenceUpdate: self.viewModel.requestPreferenceUpdate)
        let services = TalkroomListServices(chatRoomNetwork: ChatRoomNetwork())
        let viewController = TalkRoomListViewController.instantiate(withViewModel: viewModel, andServices: services)
        return viewController
    }
    private var groupTalkRoom: TalkRoomListViewController {
        let viewModel = TalkRoomListViewModel(type: .group,
                                              filteredTalkroomWithPreferenceLists: self.viewModel.groupTalkRoomWithPreferenceLists,
                                              requestPreferenceUpdate: self.viewModel.requestPreferenceUpdate)
        let services = TalkroomListServices(chatRoomNetwork: ChatRoomNetwork())
        let viewController = TalkRoomListViewController.instantiate(withViewModel: viewModel, andServices: services)
        return viewController
    }

    public var steppers: [Stepper] {
        return [viewModel, allTalkRoom.viewModel, siteTalkRoom.viewModel, companyTalkRoom.viewModel, groupTalkRoom.viewModel]
    }

    override func viewDidLoad() {
        self.prepareUI()
        self.configureNavigationBar()
        super.viewDidLoad()
        bindViewModel()

    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        viewModel.requestTalkRoomList.onNext(())
        viewModel.requestPreferenceList.onNext(())
        viewModel.locationFilter.accept(PersistenceManager.shared.savedFilterLocation)
    }

    func bindViewModel() {
        viewModel.pagerTabIndexSubject.subscribe(onNext: { (index) in
            self.moveToViewController(at: index, animated: true)
        })
            .disposed(by: bag)

        viewModel.preferenceUpdateResponse.subscribe(onNext: { [weak self] _ in
            self?.viewModel.requestTalkRoomList.onNext(())
            self?.viewModel.requestPreferenceList.onNext(())
        })
            .disposed(by: bag)
    }

    private func prepareUI() {
        self.title = "トークルーム一覧"
        buttonBarView.isScrollEnabled = false
        buttonBarItemSpec = ButtonBarItemSpec.nibFile(nibName: "PagerTabCell", bundle: Bundle(for: PagerTabCell.self)) { _ in
            return self.view.frame.width/4
        }
        settings.style.buttonBarBackgroundColor = .white
        settings.style.buttonBarItemBackgroundColor = .white
        settings.style.selectedBarBackgroundColor = Asset.duskBlue.color
        settings.style.selectedBarHeight = 2.0
        settings.style.buttonBarMinimumLineSpacing = 0
        settings.style.buttonBarItemTitleColor = .black
        settings.style.buttonBarLeftContentInset = 0
        settings.style.buttonBarRightContentInset = 0

        changeCurrentIndexProgressive = { (oldCell: PagerTabCell?, newCell: PagerTabCell?, progressPercentage: CGFloat, changeCurrentIndex: Bool, animated: Bool) -> Void in
            guard changeCurrentIndex == true else { return }
            oldCell?.titleLabel.textColor = .black
            newCell?.titleLabel.textColor = Asset.duskBlue.color
        }
    }

    private func configureNavigationBar() {
        self.addBarItem(position: .left, title: "編集", target: self, action: #selector(editButtonTapped))
        self.addBarItem(position: .right, image: Asset.iconPlus.image, target: self, action: #selector(addButtonTapped))
    }

    @objc private func editButtonTapped() {

    }

    @objc private func addButtonTapped() {
        self.viewModel.navigateToCreateTalkRoom()
    }

    override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
        return [allTalkRoom, siteTalkRoom, companyTalkRoom, groupTalkRoom ]
    }

    override func configure(cell: PagerTabCell, for indicatorInfo: IndicatorInfo) {
        cell.iconImageView.image = indicatorInfo.image?.withRenderingMode(.alwaysOriginal)
        cell.titleLabel.text = indicatorInfo.title

    }

}

Снимок экрана iPhone 6 plus Симулятор iPhone 11 Pro Max, исходный видiPhone 11, проблемный сценарий


person Md. Sulayman    schedule 04.12.2019    source источник
comment
Вы изменили класс BaseButtonBarPagerTabStripViewController? Вы пробовали использовать elasticIndicatorLimit? Похоже, этот перестанет прокручиваться вбок, когда вы находитесь на первой или последней вкладке.   -  person Starsky    schedule 04.12.2019
comment
я не модифицировал BaseButtonBarPagerTabStripViewController, я просто унаследовал его. Я не пробовал elasticIndicatorLimit. Не могли бы вы сказать мне, где найти это свойство elasticIndicatorLimit ??   -  person Md. Sulayman    schedule 04.12.2019
comment
Как мне использовать этот elasticIndicatorLimit?? любой пример пожалуйста..   -  person Md. Sulayman    schedule 04.12.2019
comment
Ознакомьтесь с их документацией на github здесь. Есть это свойство и объясняется, как им пользоваться.   -  person Starsky    schedule 04.12.2019
comment
Также очень странно, как вы наследуете от их класса. У вас так BaseButtonBarPagerTabStripViewController<PagerTabCell>, а должно быть так BaseButtonBarPagerTabStripViewController   -  person Starsky    schedule 04.12.2019


Ответы (1)


  1. Я не знаю, в чем проблема в вашем коде, но я использовал XLPagerTabStrip и получил тот же вид проблемы. У них очень мало документации. Я загружаю код их демонстрационного примера с Github. Я просто копирую и вставляю их контроллер представления из раскадровки и кода. После этого я модифицирую его в соответствии со своими требованиями.

  2. Если вы используете Xcode 11 или выше, проверьте возможности светлого и темного режима вашего приложения. Если ваше приложение полностью находится в светлом режиме, обеспечьте поддержку темного режима. Я надеюсь, что это может быть полезно для вас.

person Abhishek Patel    schedule 04.12.2019