繁体   English   中英

iOS - 无法让自定义视图在 UIViewController 中居中

[英]iOS - Can't get custom view to center in UIViewController

我很难让自定义视图在 UIViewController 中正确显示。 我是 iOS 的新手,我不确定我是否正确地限制了这一点。

我有一个 BaseTabBarController ,它设置了我的三个选项卡和控制器,效果很好。 在我的 MainFeedViewController 中,我无法限制我的自定义视图。 目前,我的自定义视图要么出现在设备的左上角,要么如下以编程方式设置约束时,视图被锚定在屏幕的右侧,当设备旋转时,就好像视图 controller 保持其横向模式下的纵向尺寸。

我很困惑,需要一些关于正确设置约束以使视图居中的指导。

另外,我应该在其 Xib 中设置我的自定义视图的大小,还是符合我在 MainFeedViewController 中设置容器视图的视图大小?

class MainFeedViewController: UIViewController {

  @IBOutlet weak var articlePreview: ArticlePreviewView!

  override func viewDidLoad() {
    super.viewDidLoad()
      setupView()
    }

    func setupView() {
      view.backgroundColor = UIColor(named: "standardBackgroundColor")
      articlePreview.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
      articlePreview.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
      articlePreview.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
      articlePreview.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

    }
}
class ArticlePreviewView: UIView {

  @IBOutlet var contentView: UIView!
  @IBOutlet weak var articleInfoContainer: UIView!

  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    initSubviews()
  }

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

  func initSubviews() {
    let nib = UINib(nibName: "ArticlePreviewView", bundle: nil)
    nib.instantiate(withOwner: self, options: nil)
    addSubview(contentView)
    contentView.frame = self.bounds
    contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    setupViewTheme()
  }

  func setupViewTheme() {
    contentView.backgroundColor = .blue
    //articleInfoContainer.backgroundColor = .white
  }
}

在此处输入图像描述

您不应该将自动布局与自动调整蒙版和帧大小混合在一起。 删除 ArticlePreviewView 中设置框架和 autoResizingMask 并使用约束的代码,如果您希望视图填充其超级视图,您可以使用

        view.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            view.leadingAnchor.constraint(equalTo: superview.leadingAnchor),
            view.bottomAnchor.constraint(equalTo: superview.bottomAnchor),
            view.trailingAnchor.constraint(equalTo: superview.trailingAnchor),
            view.topAnchor.constraint(equalTo: superview.topAnchor)
            ])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM