- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的场景阻止我进行子类化
class Button: UIButton {
override open func layoutSubviews() { // I cannot do this
super.layoutSubviews()
layer.cornerRadius = bounds.height / 2
}
}
我的场景阻止我使用常量和这个场景。 不我不能覆盖 MyView
中的 layoutSubviews
,这只是为了给示例提供上下文。
class MyView: UIView {
let buttonHeight: CGFloat = 50
lazy var button: UIButton = ...
func setupSubViews() { // I cannot do this either..
button.addConstraint(button.heightAnchor.constraint(equalToConstant: buttonHeight))
button.layer.cornerRadius = buttonHeight / 2
}
}
我想要什么(不可能?😬)。而且不我不能覆盖MyView
中的layoutSubviews
,它只是给示例一个上下文。
class MyView: UIView {
lazy var button: UIButton = ...
func setupSubViews() {
// desired solution, using some closure that will be run when layouting
button.whenLayout { button, boundsWhenLayout in
button.layer.cornerRadius = boundsWhenLayout.height / 2
}
}
}
是否有可能做我想做的事?我再说一遍,我不能子类化也不能使用常量作为高度。我不能在拥有 UIButton 的 View / View Controller 中使用 layoutSubview。我想要一个通用的解决方案。
也许以某种方式使用 Objective-C method swizzling?或者也许使用一些转换
最佳答案
这个怎么样:
private let swizzling: (AnyClass, Selector, Selector) -> () = { forClass, originalSelector, swizzledSelector in
let originalMethod = class_getInstanceMethod(forClass, originalSelector)
let swizzledMethod = class_getInstanceMethod(forClass, swizzledSelector)
method_exchangeImplementations(originalMethod, swizzledMethod)
}
extension UIButton {
public func startSwizzle() {
let originalSelector = #selector(layoutSubviews)
let swizzledSelector = #selector(swizzled_layoutSubviews)
swizzling(UIButton.self, originalSelector, swizzledSelector)
}
func swizzled_layoutSubviews() {
swizzled_layoutSubviews()
print("swizzled_layoutSubviews ", self.frame)
}
}
这是对 UIButton 的扩展,它添加了一个 startSwizzle 方法,调用该方法时会在实际类版本之前执行 swizzled_layoutSubviews()。
关于ios - 执行 `layoutSubviews` 绘图_without_子类化 View ,而不是使用闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44564087/
代码: class ViewController: UIViewController{ var button = CustomButton() override func viewDi
我正在尝试重新定位我的 UIBarButtonItem,使其边缘紧靠 UINavigationBar 的顶部和右侧。我找到了 this accepted answer关于如何做到这一点,但我真的不明白
我刚刚在iOS版的Facebook SDK中看到,他们在layoutSubviews方法的结尾而不是开头调用[Super layoutSubviews];。。据我所知,我们应该始终把它作为第一条线来做
我有一些 Layer1作为子层附加到我的自定义 View 的根层。 然后,当我改变了 Layer1 的变换时,发生了一件有趣的事情。内touchesMoved , layoutSubviews 被调用
我有一个包含 2 个 subview 的 View - collectionView 和自定义 View 。我想设置一个操作在布置 2 个 View 后运行,但layoutSubViews 运行了两次
我有一个 View (LSTabBarView),它支持使用以下方法插入/删除新元素: - (void)insertItem:(LSTabItem *)item atIndex:(NSUInteger
我正在用 Swift 开发一个 iOS 应用程序,我有一个带有自定义 UITableViewCells 的 UITableView,通过覆盖 在单元格的左侧和右侧有间距layoutSubviews()
对于 Xcode 6 和 iOS8,我的应用程序出现了奇怪的问题。问题出在我用 xib 文件制作的自定义 UITableViewCell 中。在 iOS8 模拟器上,layoutSubviews 方法
问题“When does layoutSubviews get called?”中列出了几种情况: 调整了父 View 的大小 设备旋转 还有吗? 如果不需要处理,对于UITableView,我们可以
我希望标签的字体大小与屏幕大小成正比。我已将 UILabel 类子类化以实现此目的: @IBDesignable class MyCustomLabel: UILabel { override
当我的主视图旋转时,我想重新安排 subview ,所以在我的 ViewController 中,我重写了 willAnimateRotationToInterfaceOrientation:(UII
正如标题所说:我创建一个空的 UIView 子类并向其中添加一个 subview ,创建一个空的layoutSubviews 方法并在其中添加一个断点。然后我构建项目,并在layoutSubviews
我正在将我的 iOS 6 应用程序转换到 iOS 7 并且遇到了一些问题。 在 iOS 6 中,将调用不再调用的方法。 我的类继承自 UIAlertView。 例如: - (void)layoutSu
我处于两难境地,使用哪种方法来设置自定义 UIViews 的框架,其中包含许多 subview ,并且仍然有动画并自动调整到旋转。当我创建一个新的 View Controller 时,我通常会在 lo
我有许多自定义 UIView。 我经常发现自己在自定义 View 的初始化中初始化属性,但我也在那里设置了框架。 我通常将 layoutSubviews 留空。如果我不希望我的 View 边界发生变化
我创建了一个自定义 UITableViewCell 类。在该类中,我根据单元格内部的图像调整单元格的高度。 - (void)layoutSubviews { [super layoutSubv
我正在为我的应用程序创建一个设置 View ,该 View 中有一个 UITableView。我正在创建自定义单元格以满足我的需要,但我遇到了问题 - 只有最后一个单元格正在获取 [layoutSub
我在我的 ViewController 中实现了 commitEditingStyle 方法,这样我就可以在适当的单元格上滑动以将其删除。但是当我在 Debug模式下在一个单元格上滑动时,layout
使用 Xcode 4.2/iOS5.0 我有一个 viewController 和一个关联的 viewController.xib。 viewController 被设置为 .xib 文件的所有者。它
我正在尝试为某些 subview 创建自定义布局。我的文件是一个 ViewController,因此我必须将其 View 称为 self.view。 subview 是 self.view 的 sub
我是一名优秀的程序员,十分优秀!