Autolayout ScrollView программно быстро - PullRequest
0 голосов
/ 07 ноября 2018

Мне нужно установить макет полноэкранного ScrollView с авторазметкой. на данный момент у меня есть этот код, но нет секты полной высоты, и я не могу понять, какую переменную изменить. У меня есть этот код

func setControlsType(controlsType: ControlsType, bounds: CGRect, startingDim: CGFloat, scrolledDim: CGFloat) {
    self.controlsType = controlsType
    if Utils.isInPortraitState() {
        /*self.startingFrame = CGRect(x: 0, y: bounds.height - startingDim, width: bounds.width, height: scrolledDim)
        self.scrolledFrame = CGRect(x: 0, y: bounds.origin.y + bounds.height - scrolledDim, width: bounds.width, height: scrolledDim)*/
        self.startingFrame = CGRect(x: 0, y: bounds.height, width: bounds.width, height: scrolledDim)
        self.scrolledFrame = CGRect(x: 0, y: bounds.origin.y + bounds.height, width: bounds.width, height: scrolledDim)
    } else {
        self.startingFrame = CGRect(x: startingDim - scrolledDim, y: 0, width: scrolledDim, height: bounds.height)
        self.scrolledFrame = CGRect(x: 0, y: 0, width: scrolledDim, height: bounds.height)
    }


func setControls(type: ControlsType) {
    let safeBounds = SafeAreaManager.letsDoIt(view: self, upon: .bounds)

    /*let sDim = (Utils.isInPortraitState() ?  safeBounds.height + (self.workbenchView.frame.origin.y + self.workbenchView.frame.size.height) : safeBounds.width + (self.workbenchView.frame.size.width + self.workbenchView.frame.width))*/

    let sDim = CGFloat(0)

    var scDim = CGFloat(0)

    if Utils.isIPad() {
        if Utils.isInPortraitState() {
            scDim = safeBounds.height - (self.workbenchView.frame.origin.y  + 2 * (self.workbenchView.frame.size.height/3))
        } else {
            scDim = self.workbenchView.frame.origin.x  + self.workbenchView.frame.size.width/3
        }
    } else {
        if Utils.isInPortraitState() {
            scDim = safeBounds.height - self.workbenchView.frame.size.height
        } else {
            scDim = safeBounds.width - self.workbenchView.frame.size.width
        }
    }
    self.controlsView.setControlsType(controlsType: type, bounds: safeBounds, startingDim: sDim, scrolledDim: scDim)
}

1 Ответ

0 голосов
/ 07 ноября 2018

Кажется, что этот код отсутствует в вашем контроллере представления, поэтому я вижу два варианта среди других:

  1. Вы передаете свое представление и свое представление прокрутки одной из ваших функций в файле, которым вы поделились выше. Затем вы применяете ограничения к виду прокрутки, чтобы его кадр соответствовал вашему виду просмотра. Эта функция будет выглядеть так:

    func resizeScrollView(view: UIView, scrollView: UIScrollView) {
        NSLayoutConstraint(item: scrollView, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1, constant: 0).isActive = true
        NSLayoutConstraint(item: scrollView, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0).isActive = true
        NSLayoutConstraint(item: scrollView, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0).isActive = true
        NSLayoutConstraint(item: scrollView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0).isActive = true
    }
    
  2. Или вы можете получить доступ к свойству bounds экрана вашего устройства через UIScreen, и в этом случае функция будет выглядеть следующим образом:

    func resizeScrollView(scrollView: UIScrollView) {
        scrollView.bounds = UIScreen.main.bounds
    }
    

Затем вам нужно будет установить положение вида прокрутки в контроллере вида.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...