Я хочу добавить UILabel извне в ячейку представления коллекции моей библиотеки - PullRequest
0 голосов
/ 23 апреля 2019

Для файла PageCell0 в моей библиотеке на github, Я хочу использовать exetension в проекте, чтобы представить библиотеку и добавить UILabel (newLabel), используя addSubView.

Я написал это следующим образом в том месте, где я представил библиотеку, но я обеспокоен, потому что UILabel не отображается в симуляторе, даже если он построен.

Я ищу решение, но не знаю.

//Project file that introduced the library

import UIKit
import SlidingCellWithDrag0Framework

class ViewController: MainViewController {
    var cell1: PageCell1?

    var newLabel: UILabel = {
        let nL = UILabel()
        nL.textColor = UIColor.yellow
        nL.text = "newLabel"
     nL.translatesAutoresizingMaskIntoConstraints = false
        return nL
    }()

    override func viewDidLoad() {
        super.viewDidLoad() 

        cell1?.addSubview(newLabel)

     newLabel.anchor(top: cell1?.topAnchor,
             leading: cell1?.leadingAnchor,
             bottom: nil,
             trailing: cell1?.trailingAnchor,
             padding: .init(top: 10, left: 20, bottom: 10, right: 30),
             size: .init(width: 300,
             height: 150))

    }
}

: Изменить код



// AppDelegate

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {


  window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()        
        let home = UINavigationController(rootViewController : ViewController())
        window?.rootViewController = home
    return true
    }
}

```

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Вы не должны добавлять subView непосредственно в Cell. Сделайте это вместо:

cell.contentView.addSubview(subView1)
0 голосов
/ 23 апреля 2019

Не уверен, является ли ваша функция newLabel.anchor расширением или нет. Но похоже, что вы добавляете ярлык, а не используете автоматическое расположение. Поэтому вам нужно добавить newLabel.translatesAutoresizingMaskIntoConstraints = false, чтобы ваша метка не использовала автоматическое размещение. Это можно добавить либо до, либо после добавления метки в качестве дополнительного представления.

https://developer.apple.com/documentation/uikit/uiview/1622572-translatesautoresizingmaskintoco

Редактировать: вот базовый пример с удаленным кодом дополнения и небольшим улучшением кода. Я бы установил значение ячейки в вашем init. Вам также понадобится код инициализации (на мобильном устройстве, поэтому не добавляйте его).

import UIKit
import SlidingCellWithDrag0Framework

class ViewController: MainViewController {
    var cell1: PageCell1?

    var newLabel: UILabel = {
        let nL = UILabel()
        nL.textColor = UIColor.yellow
        nL.text = "newLabel"
        nL.translatesAutoresizingMaskIntoConstraints = false

        return nL
    }()

    init(cell1: PageCell1) {
        self.cell1 = cell1
    }

    // You'll need init coder here too

    override func viewDidLoad() {
        super.viewDidLoad() 

        cell1.addSubview(newLabel)
        NSLayoutConstraint.activate([
            newLabel.leadingAnchor.constraint.equalTo(cell1.leadingAnchor),
            newLabel.trailingAnchor.constraint.equalTo(cell1.trailingAnchor),
            newLabel.topAnchor.constraint.equalTo(cell1.topAnchor) // This is just a placeholder

            ])

    }
}

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