Пользовательский UIView начинается с покрытия только части экрана - PullRequest
0 голосов
/ 26 апреля 2018

У меня странная проблема.У меня есть пользовательский UIView, который должен заполнить экран.Вот изображение графического интерфейса пользователя вместе с ограничениями:

GUI Image

Теперь главная проблема на симуляторе iPad Pro 12.9 "сначалаПользовательский вид заполняет только часть экрана, как если бы он следовал ограничениям размера Air 2. Однако, если я отойду от экрана и вернусь к нему так, что экран не воссоздается, а просто перерисовывается, графический интерфейс выглядит почтиС другой стороны, графический интерфейс выглядит практически идеально на имеющемся у меня устройстве iPad Mini без необходимости возвращаться и возвращаться. Это не совсем так, потому что изображение в средней части слегка обрезается сверху и снизу, но я не пытался выяснить, почему это происходит. Я потратил немало времени, пытаясь отладить проблему, о которой я спрашиваю. Если вам нужна дополнительная информация, чтобы помочь мне решить эту проблему, я счастливчтобы обеспечить это - просто укажите, что вам нужно. На контроллерах представления, которые фактически содержат это настраиваемое представление, я использую маски автоматического изменения размераl Экран, который, очевидно, не работает, но ограничения были опробованы, и они тоже не помогли.

Есть идеи, как это исправить?

ОБНОВЛЕНИЕ: Я изменил ограниченияк чему-то, что мне понравилось больше, так как я использовал «Сбросить на предложенные ограничения», и это создало некоторые странные ограничения.Проблема все еще существует, однако.

Current Constraints

Вот часть кода, включающего представление:

class SessionDisplayViewController: SessionViewDisplayViewControllerBase
{
//some code omitted for succinctness
@IBOutlet weak var mySessionView: SessionDisplayView!

override func getSessionView() -> SessionDisplayView
{
    return mySessionView
}
...
}

class SessionViewDisplayViewControllerBase: UIViewController, SessionDisplayViewDelegate{

...
 override func viewDidLoad() {
    super.viewDidLoad()
...
 if !ShareData.sharedInstance.sessionDataObjectContainer.keys.contains(curSessName) || ShareData.sharedInstance.sessionDataObjectContainer[curSessName] == nil
    {
        setupMySession(isLive: false, isFinalized: false)
    }
    else if (ShareData.sharedInstance.sessionDataObjectContainer[curSessName]?.isFinalized)!
    {
        setupMySession(isLive: false, isFinalized: true)
    }
    else
    {
        setupMySession(isLive: true, isFinalized: false)
        var fromTempChoose = ShareData.sharedInstance.startingSessionFromTempChoose && !(ShareData.sharedInstance.globalsVar?.hasStartedSession)!

        if fromTempChoose || (ShareData.sharedInstance.resumingSessionFromSessDet && !(ShareData.sharedInstance.globalsVar?.hasResumedSession)!)
        {
            let mySessionView = getSessionView()
            mySessionView.curScene.pauseSession(isStartingNow: true)
            blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)
            //}
            blurEffectView = UIVisualEffectView(effect: blurEffect)
            //always fill the view
            blurEffectView?.frame = self.view.bounds
            blurEffectView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]
            self.view.addSubview(blurEffectView!)
        }
...
}
    var mySessObj = getSessionView() //these three lines of code were added to try to fix the problem.  They weren't in the original code
    mySessObj.frame = self.view.bounds
    setNeedsDisplay()
}
 ...

func setupMySession(isLive: Bool, isFinalized: Bool)
{
    let mySessionView = getSessionView()
    //mySessionView.translatesAutoresizingMaskIntoConstraints = false
    mySessionView.delegate = self
    sessionNameIndex = self.getSessionNumber() - 1

    let myName = ShareData.sharedInstance.currentAccount.name
    var curSessName = generateCurrentAccountName(name: myName!, value: self.getSessionNumber())
    //var names = generateAllPossibleSessionNames(name: myName!)
    let curSession = ShareData.sharedInstance.sessionDataObjectContainer[curSessName]

    mySessionView.onView(index: getSessionNumber(), sessionName: curSessName, isLive: isLive, isFinalized: isFinalized)
    if isLive
    {
        let val = curSession?.currentValue()
        mySessionView.curScene.setStartPosition(newValue: val!) 
    }
}

1 Ответ

0 голосов
/ 04 мая 2018

Мне потребовалось некоторое время, чтобы понять это.Программное обеспечение добавляло в представление ограничение маски автоматического изменения размера, что делало его забавным.Чтобы решить эту проблему, при инициализации пользовательского UIView мне пришлось добавить следующие строки кода:

self.view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
self.view.frame = self.bounds

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

...