2016-08-23 7 views
0

У меня возникла проблема с изменением положения моего UILabel. Я могу изменить цвет и фон шрифта и т. Д., Но его положение, похоже, не движется независимо от того, что я пытаюсь сделать. Любая помощь будет оценена по достоинству. Я также не использую раскадровку вообще.Программно перемещаемый UILabel не работает

Я довольно новичок в этом, поэтому, вероятно, я пропустил что-то очень очевидное. Я искал googled и пробовал все, что я думал, но не повезло.

View Builder:

import UIKit 

class StandMapView: UIView { 

    var titleLabel: UILabel = UILabel() 
    var standMapImage: UIImageView = UIImageView() 
    var hotspotImage: UIImageView = UIImageView() 
    var hotspotTitleLabelArray: [UILabel] = [] 
    var hotspotTextArray: [UITextView] = [] 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     setupView() 
    } 

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

    func bind(standMap: StandMap, hotspots: [Hotspot]) { 
     titleLabel.text = standMap.title 
     standMapImage.image = UIImage(named: standMap.mapImage) 
     hotspotImage.image = UIImage(named:standMap.hotspotImage) 
     for hotspot in hotspots { 
      let hotspotTitle = UILabel() 
      let hotspotText = UITextView() 
      hotspotTitle.text = hotspot.title 
      hotspotText.text = hotspot.text 
      hotspotTitleLabelArray.append(hotspotTitle) 
      hotspotTextArray.append(hotspotText) 
     } 
    } 

    private func setupView() { 

     let screenWidth = UIScreen.mainScreen().bounds.width 
     let screenHeight = UIScreen.mainScreen().bounds.height 
     self.frame = CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight) 

     titleLabel.translatesAutoresizingMaskIntoConstraints = false 
     standMapImage.translatesAutoresizingMaskIntoConstraints = false 
     hotspotImage.translatesAutoresizingMaskIntoConstraints = false 

     self.backgroundColor = UIColor.blackColor() 

     titleLabel.sizeToFit() 

     titleLabel.frame = CGRect(x: screenWidth/2, y: 30, width: 0, height: 0) 
     titleLabel.textAlignment = .Center 
     titleLabel.numberOfLines = 0 
     titleLabel.adjustsFontSizeToFitWidth = true 
     titleLabel.textColor = UIColor.whiteColor() 

     addSubview(titleLabel) 

    } 

} 

View Controller:

import UIKit 

    class StandMapViewController: UIViewController { 

     var standMap: StandMap! 
     var hotspots: [Hotspot] = [] 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      Hotspot.all { hotspot in 
       hotspot.forEach(self.assignHotspotVariable) 
      } 

      StandMap.build {standMap in 
       standMap.forEach(self.assignStandMapVariable) 
      } 

      viewForStandMap(standMap, hotspots: hotspots) 

     } 

     private func assignStandMapVariable(standMap: StandMap) { 
      self.standMap = standMap 
     } 

     private func assignHotspotVariable(hotspot: Hotspot) { 
      hotspots.append(hotspot) 
     } 

     private func viewForStandMap(standMap: StandMap, hotspots: [Hotspot]) { 
      let standMapView = StandMapView(frame: CGRectZero) 
      standMapView.bind(standMap, hotspots: hotspots) 
      view.addSubview(standMapView) 
     } 
    } 
+0

при добавлении метки на ваш взгляд вы должны также настроить его кадр в нем не принимая весь экран размеров –

+1

Пожалуйста, пост меньше коды; только то, что имеет значение. –

ответ

0

Если вы хотите, чтобы изменить положение метки, необходимо изменить происхождение х и у

titleLabel.frame.origin.x = 0.0 // put your value 
titleLabel.frame.origin.y = 0.0 // put your value 
self.view.layoutIfNeeded() 
+0

ive попробовал это, но он не работает. спасибо, хотя – Wazza

+0

Попробуйте добавить self.view.layoutIfNeeded() после установки источника –

+0

, который не запустил его. я не могу понять, почему он не переместится – Wazza

0

Если вы используете AutoLayout, выполните следующие действия:

1) установить выход для ограничения UILable, который вы хотите изменить.

2) Затем измените константу этого ограничения в соответствии с вашими потребностями, например. xPosOfLable.constant = х

0

Если метка имеет ограничение с autolayout в раскадровке, необходимо отключить ограничения для перемещения frame.Try с помощью

titleLabel.translatesAutoresizingMaskIntoConstraints = YES;

+0

im не использовал раскадровку вообще – Wazza

0

Мне удалось решить эту проблему, используя snapkit cocoa pod, чтобы сделать ограничения, а затем добавить subview перед объявлением этих ограничений.

Спасибо за помощь всем.

Heres изменения я сделал функцию setupView:

 private func setupView() { 

      titleLabel.translatesAutoresizingMaskIntoConstraints = false 
      standMapImage.translatesAutoresizingMaskIntoConstraints = false 
      hotspotImage.translatesAutoresizingMaskIntoConstraints = false 

      self.backgroundColor = UIColor.blackColor() 
      titleLabel.textColor = UIColor.whiteColor() 
      titleLabel.textAlignment = .Center 
      titleLabel.numberOfLines = 0 
      titleLabel.adjustsFontSizeToFitWidth = true 
      addSubview(titleLabel) 

      titleLabel.snp_makeConstraints { make in 
       make.topMargin.equalTo(snp_topMargin).multipliedBy(60) 
       make.centerX.equalTo(snp_centerX) 
      } 



     } 
Смежные вопросы