标签: autolayout

自动布局的多行 UILabel 高度在横向上更高

请查看这个UILabel带有 Autolayout的动态多线的简单示例,它应该强制其超级视图增加高度。该示例在纵向模式下运行良好,而在横向模式下UILabel,高度增长过多。

我在故事板中设置了约束,标签的垂直压缩和拥抱优先级是 1000,超级视图的优先级是 1。视图之间的所有其他顶部、底部、前导和尾随约束都是标准的。

我用非常浅的灰色给标签的背景着色,所以很明显标签的顶部和底部边距比纵向模式大得多。有人可以建议我如何在横向中获得具有相同顶部和底部边距的标签吗?谢谢。

在此处输入图片说明

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.myTextLabel.text = @"iPhone 6 rumoured to have larger display.";
}

- (IBAction)button:(UIButton *)sender
{
    if (!self.flag) {
        self.innerHeightConstraint.constant = 120.0;
        self.myTextLabel.text = @"iPhone 6 rumoured to have larger, 1704 x 960 display. A new report indicates that Apple's testing it.";
        self.flag = YES;
    } else {
        self.innerHeightConstraint.constant = 60.0;
        self.myTextLabel.text = @"iPhone 6 rumoured to have larger display.";
        self.flag = NO;
    }
    [self.view layoutIfNeeded];
}
Run Code Online (Sandbox Code Playgroud)

objective-c ios autolayout

1
推荐指数
1
解决办法
1265
查看次数

UIScrollView 和自动布局不起作用

我正在尝试使我的应用程序中的视图可滚动。

O 完全按照教程https://www.youtube.com/watch?v=UnQsFlMGDsI 中的步骤操作。

我做的主要步骤是:

  • 添加一个 UIscrollView
  • 将视图添加到 UIscrollView(内容视图)
  • 为 UIScrollView 创建值为 0(顶部、左侧、右侧和底部)的边距约束
  • 为内容视图创建值为 0(顶部、左侧、右侧和底部)的边距约束
  • 在 ContentView 和主视图之间创建 2 个“等宽”和“等高”约束
  • ...(添加一些文本字段)

当我运行应用程序时,滚动视图不起作用

在此处输入图片说明

我真的无法让它发挥作用。我尝试了很多方法来应用 UIScrollView 并没有得到它。

storyboard uiscrollview ios autolayout xcode6

1
推荐指数
1
解决办法
2042
查看次数

UICollectionViewCell 中 UIButton 的角半径不起作用

我在 ANY-ANY 故事板类型的 ViewController 中有一个 UICollectionView 并使用快速自动布局。我已将 ViewController 的大小更改为 iPhone 5 屏幕大小。

问题是, UICollectionViewCell 中有一个按钮,我正在尝试使其循环。当我在 iPhone 5 中运行时,按钮会变成圆形,但如果我在 iPhone 6 或 6+ 中运行,它不会变成圆形。

下面是我在“cellForItemAtIndexPath”中使用的代码

    var btnImage = cell.contentView.viewWithTag(100) as UIButton
    btnImage.layer.masksToBounds = true
    btnImage.layer.cornerRadius = btnImage.frame.size.height/2
Run Code Online (Sandbox Code Playgroud)

这段代码的结果如下 在此处输入图片说明

如果我使用下面的代码

    var btnImage = cell.contentView.viewWithTag(100) as UIButton
    btnImage.layoutIfNeeded()
    btnImage.layer.masksToBounds = true
    btnImage.layer.cornerRadius = btnImage.frame.size.height/2
Run Code Online (Sandbox Code Playgroud)

结果如下

在此处输入图片说明

有没有人对这个问题有任何想法。提前致谢。

iphone autolayout uicollectionview swift

1
推荐指数
1
解决办法
2788
查看次数

如何让 NSToolbar 中的控制器随着 NSSplitViewController 的视图移动,如 Reeder 或 Mail.app

我正在开发可可应用程序。它包含一个带有一些功能按钮的工具栏。就像里德一样。

我想在调整拆分视图大小的同时调整工具栏部分的大小。像下面这样工作。如何实现这种功能?

任何人都可以帮助我或提供一些建议将不胜感激。

我正在使用 XCode7、Swift 和 Storyboard 进行开发。

在此处输入图片说明

在此处输入图片说明

xcode cocoa nssplitview nstoolbar autolayout

1
推荐指数
1
解决办法
939
查看次数

帧与边界和自动布局约束?

我最近阅读了一个关于视图的框架和边界属性的精彩问题 - UIView frame, bounds and center。我也尝试使用自动布局对此进行更多实验,现在我发现自己处于一个非常矛盾的场景中。请耐心等待,因为这可能需要一点时间。

我会一一强调它们,所以请帮助我克服所有这些 -

我拥有的?——

带有约束的视图层次结构如下 - (设计是在默认的 ViewController 大小为 600*600 上完成的)

在此处输入图片说明

在此处输入图片说明

我试图打印出这些视图的框架和边界 -

内容视图

 print(contentView.frame)// o/p - (0.0, 64.0, 600.0, 536.0) 
  print(contentView.bounds)//o/p- (0.0, 0.0, 600.0, 536.0)
Run Code Online (Sandbox Code Playgroud)

Q) **a)**为什么无论我运行哪个屏幕,帧大小都显示为 600*536。例如。如果我在 4s 屏幕或 iPad 屏幕上运行它,它的打印结果是一样的吗?

**b)**它总是在我的故事板中推断出我的 VC 的大小!!。例如。如果我在 3.5 英寸 VC 中设计屏幕,则框架尺寸变为 320.0*416.0。

**c)**因为它固定到视图的所有边,所以它应该与视图大小相同,并且它始终保持固定到边缘。那么为什么它的大小不一样self.view.frame.width*self.view.frame.height

侧面图

print(sideView.frame)//o/p - (520.0, 86.0, 80.0, 128.0) 
   print(sideView.bounds)//o/p - (0,0, 80.0, 128.0)
Run Code Online (Sandbox Code Playgroud)

问)如果我以编程方式设计自定义 UIView

let TestView = UIView(frame: CGRectMake(520.0, 86.0, 80.0, 128.0))//Mark:its frame is exactly same as sideView.frame
        TestView.backgroundColor …
Run Code Online (Sandbox Code Playgroud)

frames bounds ios autolayout swift

1
推荐指数
1
解决办法
2274
查看次数

覆盖应用程序方向设置

我有一个应用程序,我仅在其目标设置中将方向设置为纵向:

在此处输入图片说明

在一个特定的视图控制器中,我想覆盖此设置,以便在设备旋转时自动布局将更新视图。我试过这些方法没有成功:

override func shouldAutorotate() -> Bool {
    return true
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return UIInterfaceOrientationMask.AllButUpsideDown
}
Run Code Online (Sandbox Code Playgroud)

ios autolayout swift

1
推荐指数
1
解决办法
1400
查看次数

Swift:扩展 UIStackView 以创建居中的标签列表

我想创建一个居中的标签列表,沿着这条线,但居中:

标签

图片来源:http : //blog.gqueues.com/2013/07/android-vs-ios-comparing-development.html

我认为一个很好的方法是扩展UIStackView,这样我就可以有一个“addData”函数来完成创建视图并将其添加到堆栈的过程。这是到目前为止的代码:

导入基础导入 UIKit

class DataView: UIStackView {
    func addData(_ data: String) {
        let view = UIView()
        let label = UILabel()
        view.backgroundColor = UIColor.blue
        label.textColor = UIColor.white
        label.text = data
        label.sizeToFit()
        view.frame.size = label.frame.size
        view.addSubview(label)
        self.addArrangedSubview(view)
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这看起来不太对。我可以让堆栈视图显示项目的唯一方法是对宽度或左右设置约束以强制宽度。我还需要将 `Stack View 设置设置为 Alignment:Fill 和 Distribution:Fill Equally 以查看它们中的任何一个。

堆栈视图显示相同填充的项目

我的有人知道如何在这里获得更好的结果吗?

ios autolayout swift uistackview

1
推荐指数
1
解决办法
1517
查看次数

dequeueReusableCell 打破了剪辑边界

我有一个非常简单的 UIScrollView,其中包含一些内容(许多子视图)。此滚动视图用于显示用户发布的一些帖子(图像 + 文本)。这些视图之一实际上是作者的图像,它溢出底部单元格边界。因此它与后面的单元格重叠,使用clipToBounds = false我可以获得所需的结果。如果我向下滚动,一切都很好。当我开始向上滚动时,以前覆盖的视图现在被剪裁了。

单元格重叠工作正常 单元格重叠不起作用(当我向上滚动时)

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cellIdentifier = (indexPath.row % 2 == 0) ? "FeedCellLeft" : "FeedCellRight";
    let cell = feedScrollView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! FeedCell;
    self.setUpCell(cell, atIndexPath: indexPath);
    return cell
}
Run Code Online (Sandbox Code Playgroud)

setUpCell函数只是执行一些 UI 相关的任务

let row = indexPath.row

    cell.postImage.downloadImageFrom(link: rows[row].image, contentMode: .scaleToFill)
    cell.postAuthorImage.downloadImageFrom(link: "https://pbs.twimg.com/profile_images/691867591154012160/oaq0n2zy.jpg", contentMode: .scaleToFill)
    cell.postAuthorImage.layer.cornerRadius = 22.0;
    cell.postAuthorImage.layer.borderColor = UIColor.white.cgColor
    cell.postAuthorImage.layer.borderWidth = 2.0;
    cell.postAuthorImage.layer.masksToBounds = true;

    cell.selectionStyle = .none

    cell.postData.layer.cornerRadius …
Run Code Online (Sandbox Code Playgroud)

uiscrollview ios autolayout swift

1
推荐指数
1
解决办法
469
查看次数

UIScrollView 子视图未扩展以填充宽度(自动布局)

我正在使用以下代码将视图约束到父 UIScrollView 的左右锚点。

尽管右锚和左锚被设置为 ScrollView 的左锚和右锚,但视图不会扩展以填充滚动视图。

注意:这张图片中的灰色背景是 UIScrollView 的背景,所以我知道它被正确地限制在它的父视图中。

代码:

self.wtfView.translatesAutoresizingMaskIntoConstraints = false
self.wtfView.backgroundColor = UIColor.orange
self.wtfView.topAnchor.constraint(equalTo: self.passwordField.bottomAnchor, constant: 40.0).isActive = true
self.wtfView.leftAnchor.constraint(equalTo: self.containerView.leftAnchor, constant: 40.0).isActive = true
self.wtfView.rightAnchor.constraint(equalTo: self.containerView.rightAnchor, constant: 40.0).isActive = true
self.wtfView.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
self.wtfView.bottomAnchor.constraint(equalTo: self.containerView.bottomAnchor, constant: 40.0).isActive = true
Run Code Online (Sandbox Code Playgroud)

https://imgur.com/a/U88iW

编辑:以下代码工作正常,但我更喜欢使用左+右锚点技术来指定宽度,而不是在宽度约束下。那不应该吗?

self.wtfView.translatesAutoresizingMaskIntoConstraints = false
self.wtfView.backgroundColor = UIColor.orange
self.wtfView.topAnchor.constraint(equalTo: self.passwordField.bottomAnchor, constant: 40.0).isActive = true
self.wtfView.leftAnchor.constraint(equalTo: self.containerView.leftAnchor, constant: 40.0).isActive = true
self.wtfView.widthAnchor.constraint(equalTo: self.containerView.widthAnchor, constant: -80.0).isActive = true //THE DIFFERENT ONE
self.wtfView.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
self.wtfView.bottomAnchor.constraint(equalTo: self.containerView.bottomAnchor, constant: …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch ios autolayout

1
推荐指数
1
解决办法
1520
查看次数

将 NSGridView 高度设置为其内容视图的高度

我定义了一个像这样的网格视图:

let lb01 = NSTextField(labelWithString: "01")
....
let gridView = NSGridView(views:
  [ [empty, lb01],
    [empty, lb02],
    [lb03, lb04]
  ])

gridView.translatesAutoresizingMaskIntoConstraints = false  
self.addSubview(gridView)

let layoutViewMap = ["another View": anotherView, "GridView": gridView]
var constraintList = [NSLayoutConstraint]()
let constraintV = NSLayoutConstraint.constraints( withVisualFormat: "V:[GridView]-50-[anotherView]", options: [], metrics: nil, views: layoutViewMap)
constraintList += constraintV
let constraintH = NSLayoutConstraint.constraints( withVisualFormat: "|-20-[GridView(==300)]", options: [], metrics: nil, views: layoutViewMap)
constraintList += constraintH

NSLayoutConstraint.activate(constraintList)
Run Code Online (Sandbox Code Playgroud)


在某些情况下,网格视图的高度会增加

我可以定义一个明确的高度

let constraintV = NSLayoutConstraint.constraints( withVisualFormat: "V:[GridView(==70)]-50-[anotherView]", options: [], metrics: nil, views: layoutViewMap) …
Run Code Online (Sandbox Code Playgroud)

cocoa autolayout swift

1
推荐指数
1
解决办法
945
查看次数